2016-05-27 19 views
0

00000000000000000000000000000001(両方とも16進数)のキーで、平文6d65737361676531(16進数)を暗号化しようとしています。モードからCrypto.Cipher。しかし何らかの理由でciphertext1_hexciphertext2_hexの両方が3bd2ac43547a7961と等しくなり、つまり同じ暗号文が得られます。なぜこれが当てはまるのか誰にも分かりますか?それは(56ビットのDES鍵を与える)実際のキー材料である各バイトの最初の7ビットのDES鍵でPython:2つの異なるキーでDES-ECB暗号化を行うと、同じ暗号テキストが返される

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

もちろん、セキュリティが目標であれば、DESもECBモードでも使用しないでください。 – zaph

+0

16進数「0000000000000000」と「0000000000000001」は他にもあるように[弱いDESキー](http://crypto.stackexchange.com/a/32456/4747)であり、使用すべきではないことに注意してください。 – zaph

答えて

2

..各バイトの最後のビットはパリティビットです。したがって、2つのキーは実際には同じキーです。一部の実装では、パリティビットが正しくない場合には不平を言います。しかし、これは明らかにしません。

関連する問題