这是因为 Crypto 模块中的 DES3 模块使用了随机的 IV(初始向量)来加密数据,而 pyDes 模块默认使用一个固定的 IV 来加密数据。因此,每次加密的结果都不同。

如果您想让使用 Crypto 模块的 DES3 模块每次加密结果都相同,可以自己指定一个固定的 IV 来加密数据。例如:

from Crypto.Cipher import DES3
from Crypto.Random import get_random_bytes

key = b'sixteen byte key'
iv = get_random_bytes(DES3.block_size)  # 随机生成一个 IV
cipher = DES3.new(key, DES3.MODE_CBC, iv)
plaintext = b'hello world'
ciphertext = cipher.encrypt(plaintext)
print(ciphertext)

可以改为:

from Crypto.Cipher import DES3

key = b'sixteen byte key'
iv = b'12345678'  # 固定的 IV
cipher = DES3.new(key, DES3.MODE_CBC, iv)
plaintext = b'hello world'
ciphertext = cipher.encrypt(plaintext)
print(ciphertext)

这样每次加密的结果都是相同的。但是需要注意的是,使用固定的 IV 可能会降低加密的安全性。

Python DES3 加密结果不一致问题:Crypto 与 pyDes 模块差异及解决方案

原文地址: https://www.cveoy.top/t/topic/nZ8H 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录