正如解释的那样此主题,假设您使用 OpenSSL 的 -K 选项跳过密钥派生函数,PyCrypto 和 OpenSSL 使用 AES ECB 产生相同的输出。我对其进行了测试并得到了相同的输出。
但是,当我使用 Blowfish ECB 时,我得到了完全不同的输出。此代码:
from Crypto.Cipher import Blowfish
key = 'secret'
plaintext = 'abcdefgh'
cipher = Blowfish.new(key, Blowfish.MODE_ECB)
ciphertext = cipher.encrypt(plaintext)
print ciphertext.encode('hex')
产生输出:
03582d2666553c05
这些命令:
key=$(printf 'secret' | od -tx1 -An -v | tr -d ' ')
printf 'abcdefgh' | openssl enc -bf-ecb -nopad -K "$key" | od -tx1 -An -v | tr -d ' '
产生输出:
166ac1ff98632178
为什么 Blowfish 密码有所不同?
编辑:
我读了一些书,此主题我认为答案是肯定的。OpenSSL 将密钥填充为 128 位。看看当你更改时会发生什么
key = 'secret'
到
key = 'secret1234567890'
有没有办法解决这个问题 - 我在 OpenSSL 手册中没有看到任何内容? 有没有其他不使用零填充密钥的命令行程序?