Python中的AES 128

时间:2015-08-22 19:45:40

标签: python cryptography aes pycrypto

我不知道为什么当我使用PyCrypto(Crypto.Cipher-AES)在AES中加密文本时,结果与C中的代码生成的密文不同。

例如,以下代码给了我

99756ed0115f676cef45ae25937bfd63247358a80803dde3fc1eae4953ee7277

而不是

CC613A0BDC930DABEA7A26126CE489EA

这是我的代码:

key = '1F61ECB5ED5D6BAF8D7A7068B28DCC8E'
IV = 16 * '\x00'
mode = AES.MODE_CBC
encryptor = AES.new(key, mode, IV=IV)
text = '020ABC00ABCDEFf8d500000123456789'
ciphertext = encryptor.encrypt(text)
print binascii.hexlify(ciphertext)

1 个答案:

答案 0 :(得分:10)

您需要unhexlify密钥和文本(使用Python 3在IPython中的示例);

In [1]: from Crypto.Cipher import AES

In [2]: import binascii

In [3]: import os

In [4]: key = binascii.unhexlify('1F61ECB5ED5D6BAF8D7A7068B28DCC8E')

In [5]: IV = os.urandom(16)

In [6]: binascii.hexlify(IV).upper()
Out[6]: b'3C118E12E1677B8F21D4922BE4B2398E'

In [7]: encryptor = AES.new(key, AES.MODE_CBC, IV=IV)

In [8]: text = binascii.unhexlify('020ABC00ABCDEFf8d500000123456789')

In [9]: ciphertext = encryptor.encrypt(text)

In [10]: print(binascii.hexlify(ciphertext).upper())
b'2133D236609558353F7C501E6EBBB8D9

编辑:正如AndréCaron在评论中正确指出的那样,使用仅包含零的IV通常为bad idea。我已将代码更改为使用随机IV。注意,IV也应该传达给接收者;它需要解密。通常,IV被加在密文之前。