您好,我正在尝试将信息存储在 mysql 数据库中。我希望它被加密,但我希望能够不时恢复到纯文本版本。我目前正在使用的列是一个 varchar 顺便说一句,我正在使用 Python3.6 和 PyCrypto
为了加密,我调用了 pycrypto 的加密函数,它返回一个字节对象。我无法将其存储在数据库中,但如果我将其更改为字符串,我可以存储它。我可以在解码后存储 estr 或加密,它们是相同的。这是转换为字符串之前加密后的样子:
b'\x8ae"\xd5\xdd:s!*\x1b\x11!7\x16\xbel'
encrypted = encryption_suite.encrypt(plainText)
estr = ''.join(chr(x) for x in encrypted)
encrypted = encrypted.decode("unicode_escape")
当我检索加密字符串并尝试对其进行解码时,我无法返回到原始文本。我收到以下错误“输入字符串的长度必须是 16 的倍数”。这是代码:
db_val = get string from db
bytes_ = db_val.encode('unicode_escape')
decrypted = decryption_suite.decrypt(bytes_)#this line results in the above error
b'?e"\xd5\xdd:s!*\x1b\x11!7\x16\xbel' 是 bytes_ 的样子。这与原始加密字符串的值非常相似,但开头是关闭的。
关于如何解决这个问题有什么想法吗?
最佳答案
不要尝试将任意二进制数据转换为 Unicode 字符串。那样根本行不通。这就像将任意二进制数据转换为 MP3 文件,然后提示无法播放。
做 将您的任意二进制数据转换为 base64 或十六进制编码的字符串。这些编码旨在完全满足您现在的尝试。
关于python - Pycrypto 和 mySQL 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51388336/