


Einführung in die Methode zur Implementierung der DES-Verschlüsselung und -Entschlüsselung in Python (Code)
Dieser Artikel bietet Ihnen eine Einführung in die Methode (den Code) zur Implementierung der DES-Verschlüsselung und -Entschlüsselung. Ich hoffe, dass er für Sie hilfreich ist.
DES (Data Encryption Standard) verwendet eine 64-Bit-Blocklänge und eine 56-Bit-Schlüssellänge. Es benötigt eine 64-Bit-Eingabe und durchläuft eine Reihe von Transformationen, um eine 64-Bit-Ausgabe zu erhalten. Bei der Entschlüsselung werden dieselben Schritte und dieselben Schlüssel verwendet. Der einzige Unterschied besteht darin, dass die Schlüsselreihenfolge gegenüber dem Verschlüsselungsprozess umgekehrt ist.
DES-Verschlüsselung:
Die Eingabe dieses Algorithmus ist der zu verschlüsselnde Klartext und der zur Verschlüsselung verwendete Schlüssel, die beide 64 Bit lang sind. Das 8., 16., 24., 32., 40., 48., 56. und 64. Bit des Schlüssels sind Paritätsbits.
1. Verarbeitung von Klartext
Lesen Sie den Klartext in das Programm ein und konvertieren Sie ihn in eine Binärzeichenfolge
def inputText(filename): with open(filename,'r')as f: text = f.read() text = text.split('\n') text = [eval(x) for x in text] text = ['{:08b}'.format(x) for x in text] text = ''.join(text) return text
Führen Sie eine IP-Ersetzung für den Klartext durch und teilen Sie ihn in zwei Teilzeichenfolgen, die linke und die rechte Teilzeichenfolge
def IP_Transposition(plaintext): LR = [] for i in IP: LR.append(int(plaintext[i-1])) L = LR[:32] R = LR[32:] return L,R
2. Verarbeitung von Schlüsseln
Lesen Sie den Schlüssel in das Programm ein und speichern Sie ihn in Form einer Binärzeichenfolge
Führen Sie eine PC-1-Ersetzung für den Schlüssel durch und teilen Sie ihn in die beiden Teilzeichenfolgen
#密钥置换 def Key_Transposition(key): CD = [] for i in PC_1: CD.append(int(key[i-1])) C = CD[:28] D = CD[28:] return C,D
muss eine Permutationskomprimierung für den Schlüssel durchführen, bevor der für die Iteration erforderliche Schlüssel
#密钥压缩 def Key_Compress(C,D): key = C+D new_key = [] for i in PC_2: new_key.append(key[i-1]) return new_key
generiert wird, um den Unterschlüssel zu generieren ist für jede Runde der DES-Iteration erforderlich, damit die Verschlüsselung und Entschlüsselung direkt durchgeführt werden kann. Unter Verwendung von
def generateKset(key): key = inputKey(key) C,D = Key_Transposition(key) K = [] for i in LeftRotate: C = Key_LeftRotate(C,i) C = Key_LeftRotate(D,i) K.append(Key_Compress(C,D)) return K
3, F-Funktion
in jeder Transformationsrunde kann der gesamte Prozess wie folgt ausgedrückt werden Formel:
$$ L_i = R_{i-1} $$
$$ R_i = L_{i-1}bigoplus F(R_{i-1},K_i) $$
Der Rundenschlüssel Ki ist 48 Bit lang und R ist 32 Bit lang. Zuerst wird R ersetzt und auf 48 Bit erweitert. Das Ergebnis wird durch Verwendung der Substitution generiert Funktion zum Erzeugen einer 32-Bit-Ausgabe. Der 32-Bit-Ausgang wird mit L XOR-verknüpft, nachdem er durch P ersetzt wurde, und die neue R
-Ersetzungsfunktion besteht aus 8 S-Boxen. Jede S-Box verfügt über einen 6-Bit-Eingang und einen 4-Bit-Ausgang. Für jede S-Box bilden das erste und das letzte Bit der Eingabe eine 2-Bit-Binärzahl, die zur Auswahl einer der 4 Reihen alternativer Werte in der S-Box verwendet wird, und die mittleren 4 Bits werden zur Auswahl verwendet eine der 16 Spalten.
#明文R扩展为48位 def R_expand(R): new_R = [] for i in E: new_R.append(R[i-1]) return new_R #将两列表元素异或 def xor(input1,input2): xor_result = [] for i in range(0,len(input1)): xor_result.append(int(input1[i])^int(input2[i])) return xor_result #将异或的结果进行S盒代替 def S_Substitution(xor_result): s_result = [] for i in range(0,8): tmp = xor_result[i*6:i*6+5] row = tmp[0]*2+tmp[-1] col = tmp[1]*8+tmp[2]*4+tmp[3]*2+tmp[4] s_result.append('{:04b}'.format(S[i][row][col])) s_result = ''.join(s_result) return s_result #F函数 def F(R,K): new_R = R_expand(R) R_Kxor= xor(new_R,K) s_result = S_Substitution(R_Kxor) p_result = P_Transposition(s_result) return p_result #将S盒代替的结果进行P置换 def P_Transposition(s_result): p_result = [] for i in P: p_result.append(int(s_result[i-1])) return p_result
Der Verschlüsselungsprozess erfordert 16 Iterationsrunden. Die ersten 15 Iterationsrunden müssen am Ende jeder Iteration ausgetauscht werden
def DES_encrypt(filename,key,outputFile): #从文件中读取明文 plaintext = inputText(filename) #将明文进行置换分离 L,R = IP_Transposition(plaintext) #生成Kset K = generateKset(key) for i in range(0,15): oldR = R #F函数 p_result = F(R,K[i]) R = xor(L,p_result) L = oldR p_result = F(R,K[15]) L = xor(L,p_result) #IP逆置换 reversedP = IP_reverseTransp(L+R) #生成16进制表示的密文 Cipher = generateHex(reversedP) #将密文写入outputFile文件 writeFile(outputFile,Cipher) return Cipher
DES-Entschlüsselung:
def DES_decrypt(filename,key,outputFile): #文件中读取密文 Ciphertext = inputText(filename) #将密文进行置换分离 L,R = IP_Transposition(Ciphertext) #生成Kset K = generateKset(key) for i in range(15,0,-1): oldR = R #F函数 p_result = F(R,K[i]) R = xor(L,p_result) L = oldR p_result = F(R,K[0]) L = xor(L,p_result) reversedP = IP_reverseTransp(L+R) plaintext = generateHex(reversedP) writeFile(outputFile,plaintext) return plaintext
Quellcode-Adresse https://github.com/SuQinghang...
Dieser Artikel ist hier für weitere spannende Inhalte , können Sie auf die Spalte
Python-Video-TutorialDas obige ist der detaillierte Inhalt vonEinführung in die Methode zur Implementierung der DES-Verschlüsselung und -Entschlüsselung in Python (Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Sie können grundlegende Programmierkonzepte und Fähigkeiten von Python innerhalb von 2 Stunden lernen. 1. Lernen Sie Variablen und Datentypen, 2. Master Control Flow (bedingte Anweisungen und Schleifen), 3.. Verstehen Sie die Definition und Verwendung von Funktionen, 4. Beginnen Sie schnell mit der Python -Programmierung durch einfache Beispiele und Code -Snippets.

Python wird in den Bereichen Webentwicklung, Datenwissenschaft, maschinelles Lernen, Automatisierung und Skripten häufig verwendet. 1) In der Webentwicklung vereinfachen Django und Flask Frameworks den Entwicklungsprozess. 2) In den Bereichen Datenwissenschaft und maschinelles Lernen bieten Numpy-, Pandas-, Scikit-Learn- und TensorFlow-Bibliotheken eine starke Unterstützung. 3) In Bezug auf Automatisierung und Skript ist Python für Aufgaben wie automatisiertes Test und Systemmanagement geeignet.

Sie können die Grundlagen von Python innerhalb von zwei Stunden lernen. 1. Lernen Sie Variablen und Datentypen, 2. Master -Steuerungsstrukturen wie wenn Aussagen und Schleifen, 3. Verstehen Sie die Definition und Verwendung von Funktionen. Diese werden Ihnen helfen, einfache Python -Programme zu schreiben.

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer -Anfänger für Programmierungen? Wenn Sie nur 10 Stunden Zeit haben, um Computer -Anfänger zu unterrichten, was Sie mit Programmierkenntnissen unterrichten möchten, was würden Sie dann beibringen ...

Wie kann man nicht erkannt werden, wenn Sie Fiddlereverywhere für Man-in-the-Middle-Lesungen verwenden, wenn Sie FiddLereverywhere verwenden ...

Laden Sie Gurkendateien in Python 3.6 Umgebungsbericht Fehler: ModulenotFoundError: Nomodulennamen ...

Wie löste ich das Problem der Jiebeba -Wortsegmentierung in der malerischen Spot -Kommentaranalyse? Wenn wir malerische Spot -Kommentare und -analysen durchführen, verwenden wir häufig das Jieba -Word -Segmentierungstool, um den Text zu verarbeiten ...

Wie benutze ich den regulären Ausdruck, um das erste geschlossene Tag zu entsprechen und anzuhalten? Im Umgang mit HTML oder anderen Markup -Sprachen sind häufig regelmäßige Ausdrücke erforderlich, um ...


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

Dreamweaver Mac
Visuelle Webentwicklungstools

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion