python - Pycrypto 和 mySQL 问题

标签 python mysql encryption pycrypto

您好,我正在尝试将信息存储在 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/

相关文章:

php - 防止租车重复预订

mysql - NHibernate 和 MySql 关键字

mysql - 如何在 MySQL 中使用两个条件进行内部连接

security - 两方加密如何工作?

java - 自定义 Java 公钥生成(比特币)

c++ - 加密存储密码

python - BigInts 在 Julia 中似乎很慢

python - PIL : how to draw € on an image with draw. 文本?

python - Pandas 和积

python - 在 httplib.HTTPConnection 上多次发送,在 HTTPResponse 上多次读取?