如何将密文打印为十六进制字符串?

时间:2014-02-25 04:11:54

标签: python pycrypto

我使用PyCrypto模块为消息生成密文。

>>> a=AES.new("1234567890123456")
>>> m='aaaabbbbccccdddd'
>>> a.encrypt(m)
'H\xe7\n@\xe0\x13\xe0M\xc32\xce\x16@\xb2B\xd0'

我希望这个输出像hashlib

那样输出
>>> from hashlib import sha1
>>> sha1(m).hexdigest()
'68b69b51da162fcf8eee65641ee867f02cfc9c59'

也就是说,我需要一个干净的字符串,而不是带有\x等内容的字符串的字符串。

PyCrypto有没有办法实现这个目标?

如果是,如何进行加密和解密?

如果不是,我怎样才能将字符串转换为我需要的字符串?

2 个答案:

答案 0 :(得分:7)

使用binascii.hexlify(或binascii.b2a_hex):

>>> from Crypto.Cipher import AES
>>> a = AES.new("1234567890123456")
>>> m = 'aaaabbbbccccdddd'
>>> a.encrypt(m)
'H\xe7\n@\xe0\x13\xe0M\xc32\xce\x16@\xb2B\xd0'

>>> import binascii
>>> binascii.hexlify(a.encrypt(m))
'48e70a40e013e04dc332ce1640b242d0'

答案 1 :(得分:1)

如果encrypt函数返回Python字符串,则可以执行以下操作:

a.encrypt(m).encode('hex')