Python 正确使用带烧瓶的passlib

Python 正确使用带烧瓶的passlib,python,flask,passlib,Python,Flask,Passlib,我使用Python和Flask创建了带有姓名、电子邮件、密码和确认密码字段的注册页面。 为了以加密格式在数据库中存储密码,我选择了passlib。 我已经到了这样一个地步:根据文档,这段代码不起作用: name = request.form['name'] email = request.form['email'] password = pbkdf2_sha256.hash(str(request.form['pass'])) co

我使用Python和Flask创建了带有姓名、电子邮件、密码和确认密码字段的注册页面。 为了以加密格式在数据库中存储密码,我选择了passlib。 我已经到了这样一个地步:根据文档,这段代码不起作用:

        name = request.form['name']
        email = request.form['email']
        password = pbkdf2_sha256.hash(str(request.form['pass']))
        confirm = pbkdf2_sha256.hash(str(request.form['confirm']))
        if password == confirm:
            cur = mysql.connection.cursor()
            cur.execute("INSERT INTO users(name, email, password) VALUES(%s, %s, %s)", (name, email, password))
            mysql.connection.commit()
但这是有效的

        name = request.form['name']
        email = request.form['email']
        password = pbkdf2_sha256.hash(str(request.form['pass']))
        confirm = request.form['confirm']
        if pbkdf2_sha256.verify(confirm, password):
            cur = mysql.connection.cursor()
            cur.execute("INSERT INTO users(name, email, password) VALUES(%s, %s, %s)", (name, email, password))
            mysql.connection.commit()
虽然我不确定这样做是否正确。 我希望您能给我一些建议。

此库会生成一个密码列表,这样,对于相同的输入,每次的输出都会不同:

> pbkdf2_sha256.hash('password')
'$pbkdf2-sha256$29000$1pozZkyJUQrB.D.nNAYAwA$Vg8AJWGDIv2LxOUc7Xkx/rTfuaWnxqzlOC30p11KKxQ'

> pbkdf2_sha256.hash('password')
'$pbkdf2-sha256$29000$aa31XmttTek9p5Rybo3Rug$FCaAMh.T6g5FM76XD3omh3rcQgGpAiLzeqRl0wg4E.A'

所以,直接比较是行不通的。另一方面,由于salt存储在输出中,因此函数
verify
可以重复使用它来生成相同的散列并比较结果。

My Error。确实是passlib。我的问题是,通过使用
pbkdf2_-sha256比较已保存的散列和第二个表单中的纯文本提交,我是否正确地进行了验证。验证
?@在您发布的代码中,您比较了密码和密码确认,您已经有了纯文本,因此,只进行纯文本比较而不进行任何哈希就足够了。但稍后进行身份验证时,您需要使用
验证
。谢谢,这正是我想知道的。只是想确定我做的事情是正确的。