您好,我正在尝试将信息存储在mysql数据库中。我希望它被加密,但是我希望能够不时回到纯文本版本。我目前正在使用的列是varchar btw,我正在使用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_的样子。这与原始加密字符串的值非常相似,但是开头是关闭的。
关于如何解决这个问题的任何想法?
答案 0 :(得分:0)
请勿尝试将任意二进制数据转换为Unicode字符串。这样根本行不通。就像将任意二进制数据转换为MP3文件,然后抱怨它无法播放。
执行将您的任意二进制数据转换为base64或十六进制编码的字符串。这些编码旨在完全按照您现在的意图进行。