Crypto.Cipher DES3 加密结果不一致?如何与pyDes保持一致?
使用 Crypto.Cipher 模块和 pyDes 模块加密时,DES3 加密结果可能不一致,这是因为 Crypto.Cipher 模块中的 DES3 实现使用了随机向量 (IV),而 pyDes 中的实现默认使用空的 IV。随机向量是一种用于增强加密安全性的技术,每次加密时都会生成一个新的随机向量,因此每次加密结果都不同。
要让使用 Crypto.Cipher 模块和使用 pyDes 一样只初始化 DES3 对象一次,并且加密结果一致,可以使用固定的随机向量。具体实现可以参考以下代码:
import os
from Crypto.Cipher import DES3, blockalgo
import pyDes
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('Crypto:', ciphertext)
# 使用pyDes加密
cipher = pyDes.triple_des(key, pyDes.CBC, iv, pad=None, padmode=pyDes.PAD_PKCS5)
ciphertext = cipher.encrypt(plaintext)
print('pyDes:', ciphertext)
在以上代码中,我们使用 os.urandom(8) 生成 8 字节的随机向量,并将其作为参数传递给了 DES3 对象。注意,这里的随机向量需要和加密时的一致,才能得到相同的加密结果。因此,我们需要将随机向量存储起来,以便后续的解密操作使用。
原文地址: https://www.cveoy.top/t/topic/nZ8q 著作权归作者所有。请勿转载和采集!