Encryption

帶有openssl的河豚ecb沒有給出預期的結果

  • October 17, 2014

我通過 Linux CLI 執行以下操作:

printf '\xff\xff\xff\xff\xff\xff\xff\xff' > plaintext.txt
openssl enc -bf-ecb -e -in plaintext.txt -out ciphertext.txt -nosalt -K FFFFFFFFFFFFFFFF -p

然後我閱讀了 ciphertext.txt 的內容,<?= bin2hex(file_get_contents('ciphertext.txt')); ?>我得到了這個:

5aacfb5a8dc0155dd0269124c9e81789

然而,根據https://www.schneier.com/code/vectors.txt,結果是這樣的:

51866fd5b85ecb8a

由於填充,該 ciphertext.txt 的長度是測試向量結果的兩倍。但是 ciphertext.txt 的前八個字節不應該與測試向量匹配嗎?

使用(相同的明文和相同的密鑰)執行上述操作會得到與https://www.cosic.esat.kuleuven.be/nessie/testvectors/bc/des/Des-64-64.test-vectors提到des-ecb的相同的輸出(設置3, vector#255) 所以看起來我的測試方法是正確的。

有任何想法嗎?

-bf-ecb密碼通過零擴展密鑰將密鑰擴展為 128 位。

的輸出-p是這裡的跡象:

$ openssl enc -bf-ecb -e -in plaintext.txt -out ciphertext.txt -nosalt -K FFFFFFFFFFFFFFFF -p
key=FFFFFFFFFFFFFFFF0000000000000000

Blowfish 是為 32-448 位密鑰定義的,OpenSSL 實現似乎選擇了 128 位作為要使用的大小,並添加了較短密鑰的零擴展作為“方便”。

將此與 比較-des-ecb,其中 DES 僅針對 64 位密鑰定義:

$ openssl enc -des-ecb -e -in plaintext.txt -out ciphertext-des.txt -nosalt -K FFFFFFFFFFFFFFFF -p
key=FFFFFFFFFFFFFFFF

引用自:https://crypto.stackexchange.com/questions/19687