为什么我使用from CryptoCipher import DES3模块模式为MODE_CBC模式每次加密出来的结果都不一样。但是pyDes每次加密结果都是一样的pyDes也是CBC模式。我可以让使用Crypto模块和使用pyDes一样每次加密出来的结果都是一样的吗。
这是因为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可能会降低加密的安全性
原文地址: https://www.cveoy.top/t/topic/eTZe 著作权归作者所有。请勿转载和采集!