这是由于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

为什么我使用from CryptoCipher import DES3模块每次加密出来的结果都不一样我使用的是MODE_CBC模式。但是pyDes每次加密结果都是一样的。我可以让使用Crypto模块和使用pyDes一样吗我想让Crypto每次的加密结果都一样可以做到吗。每次都初始化DES3类不是我想看到的。

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

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