Eine Geschichte über einen Ingenieur, der das Emo der Kryptographie bemerkt hat und versucht, es in Python zu implementieren

Es ist keine Übertreibung zu sagen, dass die moderne Informationsgesellschaft durch kryptografische Technologie unterstützt wird. Trotzdem profitieren wir davon, ohne uns der Kryptographie besonders bewusst zu sein. Darüber hinaus gibt es die Kryptographie schon seit etwa 100 v. Chr. Darüber hinaus versucht die moderne Kryptographie, eine hohe Sicherheit zu gewährleisten, indem sie die fortschrittliche Mathematik voll ausnutzt. Letztendlich wird sie von der Blockchain-Technologie abgeleitet.

Was ist die Länge dieser Geschichte und die Breite der Verteidigung! !!

Ich bin mir also des Emos der Kryptographie bewusst und versuche, Krypto in Python zu implementieren und zu besiegen, um Wissen zu pflegen und zu aktualisieren.

Grundkonzept der Kryptographie

Die Kryptographie besteht hauptsächlich aus drei Elementen: ** Schlüsselgenerierung **, ** Verschlüsselung ** und ** Entschlüsselung **.

Insbesondere Schlüssel sind ein sehr wichtiger Faktor in der Kryptographie. Ich denke eher, dass die kryptografische Technologie eine Technologie zur Generierung dieses Schlüssels ist. Dies liegt daran, dass dieser Schlüssel sowohl zur Ver- als auch zur Entschlüsselung verwendet wird und in direktem Zusammenhang mit der Sicherheit steht.

Abhängig davon, wie der Schlüssel behandelt wird, kann er in zwei Typen eingeteilt werden: ** Verschlüsselung mit allgemeinem Schlüssel ** und ** Verschlüsselung mit öffentlichem Schlüssel **.

Bei der allgemeinen Schlüsselverschlüsselung wird sowohl bei der Verschlüsselung als auch bei der Entschlüsselung derselbe Schlüssel verwendet. Dies ist seit der Geburt der Kryptographie eine Weile der Mainstream, hat jedoch den Nachteil einer kostspieligen Schlüsselverwaltung, da die Schlüssel nur von den Parteien ausgetauscht werden dürfen, ohne dass dies Dritten bekannt ist.

Um die Nachteile der Verschlüsselung mit gemeinsamen Schlüsseln zu überwinden, werden durch die Verschlüsselung mit öffentlichen Schlüsseln die Kosten für die Schlüsselverwaltung drastisch gesenkt, indem zwei Arten von öffentlichen Schlüsseln generiert werden, ein privater Schlüssel und ein öffentlicher Schlüssel, und der öffentliche Schlüssel buchstäblich verfügbar gemacht wird. Du kannst es schaffen. Die Verschlüsselung mit öffentlichen Schlüsseln wird häufig verwendet, da sie bei geöffnetem öffentlichen Schlüssel verwendet werden kann und mit dem Informationsaustausch im Internet kompatibel ist. Bei der Verschlüsselung mit öffentlichem Schlüssel müssen der private Schlüssel und der öffentliche Schlüssel eine Korrespondenzbeziehung wie eine Tally haben, und gleichzeitig darf der private Schlüssel nicht aus dem öffentlichen Schlüssel abgeleitet werden. Daher werden mathematische Methoden wie die Primfaktorisierung großer Zahlen und diskrete logarithmische Probleme verwendet.

Zuerst aus dem klassischen Code

Die Kryptographie änderte sich in der ersten Hälfte des 20. Jahrhunderts. Bis dahin hieß es klassischer Code, und das Brechen des Codes war hauptsächlich Aufgabe der Linguisten. Dies liegt daran, dass ich beim Spielen mit den Zeichen Codes erstellt und entschlüsselt habe, z. B. das Alphabet um einige Zeichen verschoben und die zuvor erstellte Korrespondenztabelle verwendet habe.

Während des Zweiten Weltkriegs wurde jedoch der von der deutschen Armee entwickelte Code-Krieg zwischen Enigma und dem von dem britischen Informationswissenschaftler Turing geleiteten Code-Breaking-Team zu einem der Auslöser, und die Code-Technologie wurde allmählich zum Werk von Mathematikern und Informatikern. Es wurde.

Darüber hinaus wird die Kryptografie ständig weiterentwickelt und entschlüsselt. Tatsächlich verbarg die britische Armee, die das Rätsel entschlüsselt hatte, die Tatsache, dass es etwa 20 Jahre lang entschlüsselt werden konnte. Dies liegt daran, dass Sie das Risiko eingehen, stärkere Chiffren zu entwickeln, wenn Sie ankündigen, dass Sie es geknackt haben.

Dies ist nur eine Sichtweise, aber aufgrund dieses Hintergrunds denke ich, dass es relativ einfach ist, Kryptographie zu verstehen, wenn man von klassischer Kryptographie zu moderner Kryptographie lernt. Es wird dringend empfohlen, anhand der Genealogie der Entwicklung der kryptografischen Technologie zu lernen, da Sie die Unterschiede verstehen können, z. B. welche Bereiche verbessert wurden.

Zum Beispiel Caesar-Verschlüsselung

Caesar Code soll der älteste Code (?) Der Welt sein. Wie der Name schon sagt, handelt es sich um einen Code, der von Julius Caesar erstellt wurde, der um das 1. Jahrhundert vor Christus aktiv war. Dies dient zum Konvertieren der Zeichen, indem nur 3 Zeichen verschoben werden, wenn die Zeichen in alphabetischer Reihenfolge angeordnet werden. Wenn der verschlüsselte Teil in Python implementiert ist, sieht er wie folgt aus. Der ASCII-Code wird für den Teil verwendet, der die Zeichen verschiebt.

caesar-cipher.py


def enc(text):
    result = ""
    for i in range(len(text)):
        cha = text[i]
        if(cha.isupper()):
            result += chr((ord(cha) - 62) % 26 + 65)
        else:
            result += chr((ord(cha) - 94) % 26 + 97)
    return print(result)

Wenn es tatsächlich verschlüsselt ist, sieht es so aus.

caesar-cipher.py


enc("Caesar")
#Code: Fdhvdu

Beim Entschlüsseln kann die Umkehrung der Verschlüsselung erfolgen, sodass die Implementierung wie folgt erfolgt.

caesar-cipher.py


def dec(text):
    result = ""
    for i in range(len(text)):
        cha = text[i]
        if(cha.isupper()):
            result += chr((ord(cha) - 42) % 26 + 65)
        else:
            result += chr((ord(cha) - 74) % 26 + 97)
    return print(result)

Wenn es ausgeführt wird, sieht es so aus.

caesar-cipher.py


dec("Fdhvdu")
#Entschlüsselung: Caesar

Chiffre verschieben

Der Schlüssel zum Caesar-Code bestand darin, 3 Zeichen zu verschieben. Wenn es beispielsweise einen Spion gibt und dieser um 3 Zeichen falsch ausgerichtet ist, ist dies das Ende des Volumes. Daher wurde ein Code entwickelt, um den dritten Teil, dh den Schlüsselteil, zu ändern. Das nennt man Shift-Verschlüsselung.

Der Verschlüsselungsteil ist wie folgt. Dieses Mal wird die Anzahl der zu verschiebenden Zeichen als Argument angegeben. Sie können eine Funktion zum Generieren des Schlüssels erstellen, aber ich habe beschlossen, sie als Argument anzugeben, da sie nur den eingegebenen numerischen Wert so zurückgibt, wie er ist.

shift-cipher.py


def enc(plaintext, rot):
    if(rot > 25):
        rot = rot % 26
    result = ""
    for i in range(len(plaintext)):
        cha = plaintext[i]
        if(cha.isupper()):
            result += chr((ord(cha) + rot - 65) % 26 + 65)
        else:
            result += chr((ord(cha) + rot - 97) % 26 + 97)
    return print(result)

Die Entschlüsselung ist die Umkehrung der Verschlüsselung.

shift-cipher.py


def dec(encryptedtext, rot):
    if(rot > 25):
        rot = rot % 26
    result = ""
    for i in range(len(encryptedtext)):
        cha = encryptedtext[i]
        if(cha.isupper()):
            result += chr((ord(cha) - rot - 39) % 26 + 65)
        else:
            result += chr((ord(cha) - rot - 71) % 26 + 97)
    return print(result)

von jetzt an

Ich plane, den klassischen Code von BC in den modernen Code von Python zu implementieren und zu besiegen, der auch als Wartung und Aktualisierung des Wissens dient. Als ich es versuchte, konnte ich die Geschichte der Kryptographie und die Kämpfe der Vorfahren sehen, und es wurde unerwartet lustig.

Unser unmittelbares Ziel ist es, vorerst das wissensfreie System und den geheimen Austausch zu erreichen, die häufig im Blockchain-Bereich auftreten.

Recommended Posts

Eine Geschichte über einen Ingenieur, der das Emo der Kryptographie bemerkt hat und versucht, es in Python zu implementieren
Es ist einfach, SQL mit Python auszuführen und das Ergebnis in Excel auszugeben
Eine einfache Möglichkeit, die in Python benötigte Zeit anzuzeigen und sie intelligenter zu verbessern
Wie Sie die interne Struktur eines Objekts in Python kennen
Konvertieren Sie das Ergebnis von Python Optparse, um es zu diktieren und zu verwenden
[Python] Die Rolle des Sterns vor der Variablen. Teilen Sie den Eingabewert und weisen Sie ihn einer Variablen zu
[Python / Jupyter] Übersetzen Sie den Kommentar des in die Zwischenablage kopierten Programms und fügen Sie ihn in eine neue Zelle ein.
[Python] Süß Ist es süß? Über Suiten und Ausdrücke in offiziellen Dokumenten
Ein leicht verständlicher Vergleich der grundlegenden Grammatik von Python und Go
Öffnen Sie eine Excel-Datei in Python und färben Sie die Karte von Japan
Verwendung ist und == in Python
So geben Sie eine Zeichenfolge in Python ein und geben sie unverändert oder in die entgegengesetzte Richtung aus.
Ein Beispiel für die Antwort auf die Referenzfrage der Studiensitzung. Mit Python.
So speichern Sie die Feature-Point-Informationen des Bildes in einer Datei und verwenden sie zum Abgleichen
Sie werden in 100 Tagen Ingenieur - 29. Tag - Python - Grundlagen der Python-Sprache 5
Sie werden in 100 Tagen Ingenieur - Tag 33 - Python - Grundlagen der Python-Sprache 8
Sie werden in 100 Tagen Ingenieur - 26. Tag - Python - Grundlagen der Python-Sprache 3
Tipps für diejenigen, die verwirrt sind, wie man is und == in Python verwendet
Ändern Sie in Python das Verhalten der Methode je nach Aufruf
Sie werden in 100 Tagen Ingenieur - Tag 32 - Python - Grundlagen der Python-Sprache 7
Sie werden in 100 Tagen Ingenieur - 28. Tag - Python - Grundlagen der Python-Sprache 4
Die Antwort von "1/2" unterscheidet sich zwischen Python2 und 3
Über den Unterschied zwischen "==" und "is" in Python
Der erste Schritt für diejenigen, die Amateure der Statistik sind, aber Modelle für maschinelles Lernen in Python implementieren möchten
Eine Einführung in die GUI-Software der Klassenplattform, die mit Python / Tkinter erstellt wurde! (Und viele Try and Error)! (Während des Schreibens)
Der Hintergrund der Zeichen im Textbild ist überbelichtet, um das Lesen zu erleichtern.
Der erste Schritt des maschinellen Lernens ~ Für diejenigen, die versuchen möchten, mit Python zu implementieren ~
Das Ergebnis der Erstellung eines Kartenalbums italienischer Jungvermählten in Python und dessen Weitergabe
Was tun, wenn der Fortschrittsbalken in tqdm von Python nicht angezeigt wird?
Ich möchte die Variablen in der Python-Vorlagendatei ersetzen und in einer anderen Datei in Massenproduktion herstellen
So überprüfen Sie in Python, ob sich eines der Elemente einer Liste in einer anderen Liste befindet
Eine Geschichte über den Versuch, Linter mitten in einem Python (Flask) -Projekt vorzustellen
So ermitteln Sie die Anzahl der Stellen in Python
Um das Äquivalent von Rubys ObjectSpace._id2ref in Python zu tun
Vorgehensweise zum Ausleihen und Ausleihen von JS-Methoden (die verwendete Methode) in Python
Rufen Sie die Excel-Liste rekursiv in einem bestimmten Ordner mit Python ab und schreiben Sie sie in Excel.
[Super einfach! ] So zeigen Sie den Inhalt von Wörterbüchern und Listen einschließlich Japanisch in Python an
Geben Sie die Bilddaten mit Flask of Python zurück und zeichnen Sie sie in das Canvas-Element von HTML
Wenn Sie ein Argument in die Abschlussfunktion einfügen und später ausführen möchten
[Python] Der Status jeder Präfektur des neuen Koronavirus wird nur als PDF veröffentlicht, aber ich habe versucht, ihn zu kratzen, ohne ihn herunterzuladen.
Versuchen Sie es mit GUI, PyQt in Python
So tauschen Sie Elemente in einem Array in Python aus und wie kehren Sie ein Array um.
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
Der Prozess, Python-Code objektorientiert zu machen und zu verbessern
Ich habe versucht, die Mail-Sendefunktion in Python zu implementieren
Objektorientiert in C-Sprache: "○ ✕ game" wurde überarbeitet und nach Python portiert
[Tipps] Probleme und Lösungen bei der Entwicklung von Python + Kivy
Eine Geschichte über den Versuch, private Variablen in Python zu implementieren.
Ich habe versucht, das Blackjack of Trump-Spiel mit Python zu implementieren
Übersicht über die virtuelle Python-Umgebung und deren Erstellung
[Python] Was ist ein Slice? Eine leicht verständliche Erklärung zur Verwendung anhand eines konkreten Beispiels
Schreiben Sie ein Skript in Shell und Python, um Sie in Slack zu benachrichtigen, wenn der Vorgang abgeschlossen ist
[Python] Was ist Pip? Erläutern Sie die Befehlsliste und deren Verwendung anhand aktueller Beispiele
Verschrotten Sie die Liste der Go To EAT-Mitgliedsgeschäfte in der Präfektur Fukuoka und konvertieren Sie sie in CSV
Verarbeiten Sie die mit Redshift entladene gzip-Datei mit Python of Lambda, gzipen Sie sie erneut und laden Sie sie in S3 hoch
Es ist überraschend mühsam, eine Liste mit dem Datum und der Uhrzeit der letzten Anmeldung von Arbeitsbereichen abzurufen
Die Geschichte, zum ersten Mal seit 5 Jahren wieder an die Front zurückzukehren und Python Django umzugestalten
Verschrotten Sie die Liste der Go To EAT-Mitgliedsspeicher in der Präfektur Niigata und konvertieren Sie sie in CSV
Ein Memo zum Umschalten zwischen Python2-Serie und 3-Serie in der Anaconda-Umgebung von Mac (Win wird ebenfalls hinzugefügt).