可能是因为Crypto模块中的DES3实现使用了随机向量(IV),而pyDes中的实现默认使用空的IV。随机向量是用于增强加密安全性的一种技术,每次加密时都会生成一个新的随机向量。因此,每次加密结果都不同。

要让使用Crypto模块和使用pyDes一样只初始化DES3对象一次,并且加密结果一致,可以使用固定的随机向量。具体实现可以参考以下代码:

import os
from Crypto.Cipher import DES3, blockalgo

key = b'secretkey'  # 密钥
iv = os.urandom(8)  # 生成随机向量

# 使用Crypto模块加密
cipher = DES3.new(key, DES3.MODE_CBC, iv)
plaintext = b'test'
ciphertext = cipher.encrypt(blockalgo._pad(plaintext, DES3.block_size))
print(ciphertext)

# 使用pyDes加密
cipher = pyDes.triple_des(key, pyDes.CBC, iv, pad=None, padmode=pyDes.PAD_PKCS5)
ciphertext = cipher.encrypt(plaintext)
print(ciphertext)

在以上代码中,我们使用os.urandom(8)生成8字节的随机向量,并将其作为参数传递给了DES3对象。注意,这里的随机向量需要和加密时的一致,才能得到相同的加密结果。因此,我们需要将随机向量存储起来,以便后续的解密操作使用

为什么我使用from CryptoCipher import DES3模块模式为MODE_CBC模式每次加密出来的结果都不一样。但是pyDes每次加密结果都是一样的pyDes也是CBC模式。我可以让使用Crypto模块和使用pyDes一样只初始化DES3对象一次哪怕循环10次encrypt方法加密出来的结果也是一样的吗。

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

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