Python DES3 加密结果不一致问题:Crypto 模块和 pyDes 对比及解决方案
这是由于 DES3 使用的是块密码,而加密过程中需要加入 IV (Initialization Vector,初始化向量) 来增加随机性和安全性。如果每次使用不同的 IV,加密结果就会不同。
如果你希望每次加密结果一样,可以在加密前指定一个固定的 IV,例如:
from Crypto.Cipher import DES3
from Crypto.Util.Padding import pad, unpad
import binascii
key = b'secretkey1234567'
iv = b'01234567'
cipher = DES3.new(key, DES3.MODE_CBC, iv=iv)
plaintext = b'hello world'
padded_plaintext = pad(plaintext, DES3.block_size)
ciphertext = cipher.encrypt(padded_plaintext)
print(binascii.hexlify(ciphertext))
这样每次加密相同的明文都会得到相同的密文。
但是请注意,这样做会降低加密的安全性,因为 IV 的作用就是增加随机性和安全性,指定固定的 IV 会使加密变得容易受到攻击。因此,建议还是每次随机生成一个 IV。
原文地址: https://www.cveoy.top/t/topic/nZ7s 著作权归作者所有。请勿转载和采集!