Python 在MongoDB中存储加密密码时出现问题

Python 在MongoDB中存储加密密码时出现问题,python,mongodb,flask,scrypt,Python,Mongodb,Flask,Scrypt,我正在使用这里描述的技术: 这是我的注册功能的代码: @app.route('/register', methods=['POST', 'GET']) def register(): result = db.users.find_one({"username" : flask.request.form['username']}) if result is not None: return "That User Is Taken :(" else:

我正在使用这里描述的技术:

这是我的注册功能的代码:

@app.route('/register', methods=['POST', 'GET'])
def register():
    result = db.users.find_one({"username" : flask.request.form['username']})
    if result is not None:
        return "That User Is Taken :("
    else:
        pw = scrypt.encrypt(random_token(), str(flask.request.form['password']))
        db.users.insert(
            {"username" : flask.request.form['username'],
             "password" : pw
            })
        return "Registration Successful"
但是我得到了以下错误:

InvalidStringData: strings in documents must be valid UTF-8: "scrypt\x00\x11\x00\x00\x00\x08\x00\x00\x00\x03\xc3g\xfez\xf3y\x06\x11\x17\x14>\xb3\xc6\x87\xd7\xc0[\x12\xae\x04N/\x1b\xc0SpK]i\n\x1c\x99{\xbeQk~n\xce\xd3\x0b\xcc\x82\xc9B\xcec\xdd\x02 \xa0\t\xda\xc9\xce~\xfd\x9a!\xa9_\xc3\n\xcet\xfd\xaf\xd9\xe0iL\x85\xb9C\x07\xc1VD\xfa\x1d\xb7\xa6\x0f\xa5t\xfao\xa2w\xb8\xd5\xdf\x00\x9f&\x8a\x96\x0e\x9c\rGz\x1a\x80\x1c\xd6\x13T\xea\xc6\x16\x8a^\xc5_W+X86\x14\xc6T\xc4\xa1\x81[N\x14H\xc5\xc4\xab\x192z\xfcD'x\x19X\x8f\xe9m?\xab\xb9\xeb~-\xb2-\x06z\xa4,\x1cS\x82\x8a\xe2!\xe0\x01^\xd0\xc9\x9e\xbc\x94}\xbe\x8c\xbc\x9d"

知道会发生什么以及如何修复吗?

您的加密调用会返回需要在插入mongodb之前编码为UTF8的字节。调用unicode(pw,“utf-8”)进行转换。

您的加密调用将返回需要在插入mongodb之前编码为UTF8的字节。调用unicode(pw,“utf-8”)进行转换。

也许您可以使用base64。例如,base64.encodestring(str1.encode(“UTF-8”))。如果你想使用它,就可以解码。
“password”:base64.encodestring(pw.encode(“utf-8”)
告诉我
UnicodeDecodeError:“ascii”编解码器无法解码21位的字节0xef:序号不在范围内(128)
我很困惑,因为我没有解码任何东西,为什么会出现解码错误?也许你可以使用base64。例如,base64.encodestring(str1.encode(“UTF-8”))。“密码”:base64.encodestring(pw.encode(“utf-8”)告诉我UnicodeDecodeError:“ascii”编解码器无法对21位的字节0xef进行解码:序号不在范围内(128)我很困惑,因为我没有解码任何东西,为什么会出现解码错误,请注意,如果其中包含无效的UTF8字符,则需要按Mark建议对输出进行base64或uuencode编码。我尝试了
unicode(pw,'utf-8')
以及
base64.encodestring(unicode(pw,'utf-8'))
和get
UnicodeDecodeError:“utf8”编解码器无法解码位置16处的字节0x97:无效的开始字节
UnicodeDecodeError:“utf8”编解码器无法解码位置16处的字节0x97:无效的开始字节
输入是有效的字符串,因此我不知道它为什么会在转换时崩溃。明白了。因为您有无效的utf-8序列,尝试使用类似拉丁语1的编码。例如,检查。在这个问题中,询问者还有二进制编码的数据,他们想存储在文本字段中-不同的存储系统,但基本问题相同。非常感谢!该链接非常有帮助。我的程序现在也可以工作:)而且,请注意,如果其中包含无效的UTF8字符,则需要按Mark建议对输出进行base64或uuencode编码。我尝试了
unicode(pw,'utf-8')
以及
base64.encodestring(unicode(pw,'utf-8'))
和get
UnicodeDecodeError:“utf8”编解码器无法解码位置16处的字节0x97:无效的开始字节
UnicodeDecodeError:“utf8”编解码器无法解码位置16处的字节0x97:无效的开始字节
输入是有效的字符串,因此我不知道它为什么会在转换时崩溃。明白了。因为您有无效的utf-8序列,尝试使用类似拉丁语1的编码。例如,检查。在这个问题中,询问者还有二进制编码的数据,他们想存储在文本字段中-不同的存储系统,但基本问题相同。非常感谢!该链接非常有帮助。我的程序现在可以工作:)