这是因为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可能会降低加密的安全性

为什么我使用from CryptoCipher import DES3模块模式为MODE_CBC模式每次加密出来的结果都不一样。但是pyDes每次加密结果都是一样的pyDes也是CBC模式。我可以让使用Crypto模块和使用pyDes一样每次加密出来的结果都是一样的吗。

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

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