首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pycrytpo和mySQL问题

Pycrytpo和mySQL问题
EN

Stack Overflow用户
提问于 2018-07-18 02:44:20
回答 1查看 45关注 0票数 1

你好,我正在尝试将信息存储在mysql数据库中。我希望它是加密的,但我希望能够时不时地返回到纯文本版本。我目前使用的列是varchar btw,我使用的是Python3.6和PyCrypto

为了加密,我调用pycrypto的encrypt函数,该函数返回一个字节对象。我不能把它存储在db中,但是如果我把它改成一个字符串,我就可以存储它。我可以在解码后存储estr或加密,它们是相同的。以下是转换为字符串之前加密的样子:

b'\x8ae"\xd5\xdd:s!*\x1b\x11!7\x16\xbel‘

代码语言:javascript
复制
encrypted = encryption_suite.encrypt(plainText)
estr = ''.join(chr(x) for x in encrypted)
encrypted = encrypted.decode("unicode_escape") 

当我检索加密字符串并尝试对其进行解码时,我无法返回到原始文本。我得到以下错误:“输入字符串的长度必须是16的倍数”。下面是代码:

代码语言:javascript
复制
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_的样子,与原始加密字符串的值非常相似,但开头是off。

对如何解决这个问题有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-07-18 04:09:58

Unicode不尝试将任意二进制数据转换为字符串。它根本不是这样工作的。这就像是将任意二进制数据转换为MP3文件,然后抱怨它不能播放。

执行将任意二进制数据转换为base64或十六进制编码的字符串。这些编码的设计就是为了做你现在正在尝试的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51388336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档