为什么 PyCrypto 和 OpenSSL 不能使用 Blowfish ECB 产生相同的输出?

为什么 PyCrypto 和 OpenSSL 不能使用 Blowfish ECB 产生相同的输出?

正如解释的那样此主题,假设您使用 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 手册中没有看到任何内容? 有没有其他不使用零填充密钥的命令行程序?

相关内容