2016-05-27 8 views
0

Ich ist versucht, den Klartext 6d65737361676531 (die in hexadezimal) zu verschlüsseln mit den Tasten 0000000000000000 und 0000000000000001 (beide hexadezimal) die DES-Chiffre in EZB mit Modus von Crypto.Cipher. Aber aus irgendeinem Grund sind sowohl ciphertext1_hex als auch ciphertext2_hex gleich 3bd2ac43547a7961, d. H. Sie ergeben denselben Chiffretext. Hat jemand eine Idee, warum das so ist?Python: DES-Verschlüsselung EZB mit zwei verschiedenen Schlüsseln führt in dem gleichen verschlüsselten Text

from Crypto.Cipher import DES 

key1_hex = "0000000000000000" 
key2_hex = "0000000000000001" 

key1 = key1_hex.decode("hex") 
key2 = key2_hex.decode("hex") 

des1 = DES.new(key1, DES.MODE_ECB) 
des2 = DES.new(key2, DES.MODE_ECB) 

plaintext_hex = "6d65737361676531" 
plaintext = plaintext_hex.decode("hex") 

ciphertext1 = des1.encrypt(plaintext) 
ciphertext2 = des2.encrypt(plaintext) 

ciphertext1_hex = ciphertext1.encode("hex") 
ciphertext2_hex = ciphertext2.encode("hex") 
+1

Natürlich sollte man weder DES noch im ECB-Modus verwenden, wenn Sicherheit das Ziel ist. – zaph

+0

Beachten Sie, dass hex '000000000000000000' und' 0000000000000001' [schwache DES-Schlüssel] (http://crypto.stackexchange.com/a/32456/4747) sind wie viele andere und sollten nicht verwendet werden. – zaph

Antwort

2

In einen DES-Schlüssel ist es nur die ersten 7 Bits jedes Bytes, die tatsächlichen Schlüsselmaterial (was eine DES-Schlüssel von 56 Bit) .. Das letzte Bit jedes Byte ein Paritätsbit sind. Also sind die zwei Schlüssel eigentlich der selbe Schlüssel. Einige Implementierungen würden sich beschweren, wenn das Paritätsbit nicht korrekt ist. Aber das scheint es nicht zu tun.

Verwandte Themen