我从Pycrypto文档中获取了以下代码,用于我的python 2.7。这是代码。
from Crypto.Cipher import AES
from Crypto import Random
key = b'Sixteen byte key'
iv = Random.new().read(AES.block_size)
cipher = AES.new(key, AES.MODE_CFB, iv)
msg = iv + cipher.encrypt(b'Attack at dawn')
print msg
msg2 = cipher.decrypt(msg)
print str(msg2)
我试图在Sublime控制台中获得 msg 的输出。我得到的只是:
[Decode error - output not utf-8]
[Decode error - output not utf-8]
[Finished in 0.2s]
我要做的是加密消息文本并在Sublime输出中查看其加密文本并解码消息并查看原始文本。我尝试使用 msg.encode('utf-8')但未能给出如下错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x8a in position 5: ordinal not in range(128)
我如何获得文本?任何帮助。
答案 0 :(得分:3)
加密的结果是任意位和字节。您不能将它们视为文本,它们不代表任何编码的文本。
但是,您可以在文本中表示这些字节。例如,使用hexadecimal或base64。您也可以使用repr
,虽然这可能会产生误导:发生以匹配ASCII分配给可打印字符的字节的字节将显示为这些字符,即使加密的字节不是以任何方式ASCII文本。
答案 1 :(得分:0)
msg
和msg2
都是任意字节字符串。尝试从/向UTF-8输入或解码这些只有在它们只包含ASCII字节时才会成功。
另外AESCipher.decrypt()
的{{3}}:
对于MODE_CFB,密文长度(以字节为单位)必须是segment_size / 8的倍数。
我无法对此发表评论(没有加密专家),但在您的示例中,密文是30个字节。