【发布时间】:2018-11-02 00:42:54
【问题描述】:
我想对字符串进行 AES 加密和解密。但是密钥和消息必须以字节为单位,所以我通过这样做将消息转换为字节:
b"string"
这是我的 AES 代码:
# Encryption
encryption_suite = AES.new(b'1234567812345678', AES.MODE_OCB)
cipher_text = encryption_suite.encrypt(b"A really secret message. Not for prying eyes.")
# Decryption
decryption_suite = AES.new(b'1234567812345678', AES.MODE_OCB)
plaintext = decryption_suite.decrypt(cipher_text)
但是我需要将解密的纯文本转回字符串才能读取。 目前明文如下所示:
b'x\x85\x92\x9d\xe6\x0bJ\xfe\x9b(\x10G\x8e\x05\xc5\xf4\xcdA9\xc18\xb8_\xf9vbmK\x16\xf8\xa3\xb6'
我尝试过使用
plaintext.decode(encoding='windows-1252')
和
plaintext.decode("utf-8").strip('\x00')
但我得到的只是这个:
UnicodeDecodeError:“charmap”编解码器无法解码位置 3 的字节 0x9d:字符映射到
或者这个:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb1 in position 1: invalid start byte
我需要将这些字节转换回可读字符串。如果您能提供帮助,将不胜感激。
【问题讨论】:
-
这个问题很有帮助,但我不明白如何将它应用到我的案例中。还有很多答案是 python 2 stackoverflow.com/questions/1220751/…
-
嗨,如果您从上面的代码中取回纯文本,那么您的脚本中有问题。明文应该看起来与您在开始时用作输入的疼痛文本相同......所以您应该得到
-
@ZaphoOxx 如您所见,加密和解密方法是预定义的,因此我确信输出是正确的。问题是输入必须看起来像那些字节才能使函数工作,所以自然输出看起来也是这样。
-
您使用哪个模块进行加密?它看起来像 pycrypto,但我有 pycrypto 2.6.1,它不支持 AES.MODE_OCB。
-
说真的,如果初始输入和解密输出不匹配,你怎么能认为它有效?想想看。 b“我的消息”已加密。一旦你解密了密码,你应该得到完全相同的结果。否则整个加密没有意义。是吗?
标签: python python-3.x encryption type-conversion