【发布时间】:2017-04-26 08:38:17
【问题描述】:
这是我的代码:
from Crypto.Cipher import AES
import binascii
def encrypt(secret_key, sign, raw):
key = md5(secret_key).hexdigest()[::-2]
iv = md5(sign).hexdigest()[::-2]
raw += (16 - len(raw) % 16) * '\0'
generator = AES.new(key, AES.MODE_CBC, IV=iv)
#***********************************************
#Problems occur at here !
#If I execute "generator.encrypt(raw)"
#The results are not same every time
print generator.encrypt(raw) # result_1
print generator.encrypt(raw) # result_2
print generator.encrypt(raw) # result_3
#***********************************************
return binascii.b2a_hex(generator.encrypt(raw))
每次执行“generator.encrypt(raw)”时都会得到不同的结果 这让我很困惑,因为我使用了相同的 KEY 和 IV。
我想建立一个API-SYSTEM,我需要其他人发布他们的加密数据,无论他们使用哪种语言,只想在AES中得到相同的结果。
如何使用 AES 获得稳定的结果?
我的意思是当我使用相同的 KEY 和 IV 加密相同的明文时,我希望得到相同的结果。
【问题讨论】:
-
某处,您的 IV 正在重新初始化。这发生在我的 Golang AES 实现中。您需要阅读文档以了解每个步骤的作用。
-
将 AES.new(key, AES.MODE_CBC, IV=iv) 更改为 generator = AES.new(key, AES.MODE_CBC, iv) 并查看
标签: python encryption aes pycrypto cbc-mode