【问题标题】:Pycrytpo and mySQL problemsPycrypto 和 mySQL 问题
【发布时间】:2018-12-25 13:35:21
【问题描述】:

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

为了加密,我调用了 pycrypto 的 encrypt 函数,该函数返回一个字节对象。我不能将它存储在数据库中,但如果我将它更改为字符串,我可以存储它。我可以在解码后存储 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_ 的样子。这与原始加密字符串的值非常相似,但开头是关闭的。

关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: python mysql encryption pycrypto


    【解决方案1】:

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

    将您的任意二进制数据转换为 base64 或十六进制编码的字符串。这些编码旨在完成您现在正在尝试的操作。

    【讨论】:

    • 谢谢。这为我指明了正确的方向。将使用示例代码进行更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2011-09-16
    相关资源
    最近更新 更多