pycrytpo和mysql问题

but5z9lq  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(202)

你好,我正在尝试在mysql数据库中存储信息。我想它是加密,但我想能够回到纯文本版本不时。我目前使用的专栏是varchar btw,我使用的是python3.6和pycrypto
为了加密,我调用pycrypto的encrypt函数,它返回一个bytes对象。我不能将其存储在数据库中,但是如果我将其更改为字符串,我可以将其存储。我可以存储ESR或解码后加密,他们是一样的。这是转换为字符串之前加密的外观:
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'是字节\的样子。这与原始加密字符串的值非常相似,但开头是关闭的。
关于如何解决这个问题有什么想法吗?

8xiog9wr

8xiog9wr1#

不要尝试将任意二进制数据转换为unicode字符串。这根本不起作用。这就像把任意二进制数据转换成mp3文件,然后抱怨不能播放。
请将任意二进制数据转换为base64或十六进制编码的字符串。这些编码被设计来做你现在正在尝试的事情。

相关问题