gpt4 book ai didi

python - 散列密码从不淡化

转载 作者:可可西里 更新时间:2023-11-01 07:56:49 25 4
gpt4 key购买 nike

我正在使用 flask 微框架并使用 msyql 后端手动设置身份验证。

我的 sql 脚本以这种数据类型存储散列密码:VARCHAR(50),在它由 generate_password_hash 函数生成之后:

  `Password` VARCHAR(50) NOT NULL ,

我认为 VARCAHR(50) 绰绰有余...

这些是我正在使用的以下库:

from werkzeug import check_password_hash, generate_password_hash


@app.route('/login/', methods=['GET', 'POST'])
def login():
"""Logs the user in."""
if g.user: return redirect(url_for('main'))
error = None
if request.method == 'POST':
sql = "select password, userid from users where username = " + stringify(request.form['username'])
cursor = g.db.cursor()
cursor.execute(sql)
user = cursor.fetchall()
user = user[0]
password = user[0]
userid = user[1]
if user is None:
error = 'Invalid username'
elif not check_password_hash(password, request.form['password']):
error = 'Invalid password'
else:
flash('You were logged in')
session['userid'] = userid
return redirect(url_for('main'))
return render_template('login.html', error=error)

这就是问题所在:

elif not check_password_hash(password, request.form['password']):

总是返回 false。

更新:我在注册时得到了这个:

Users/Dave/Websites/fh/app.py:143: Warning: Data truncated for column 'Password' at row 1
g.db.cursor().execute("insert into users (username, email, password) values (%s, %s, %s)" % (username, email, password,))

最佳答案

你真的不需要 160 个字符。

>>> from werkzeug.security import generate_password_hash
>>> generate_password_hash("test")
'sha1$lYmusy7y$8fc97f79a9809ab4eaee4de08d1e182d04f3dc07'
>>> len(generate_password_hash("test"))
54

使用默认哈希算法 sha1 就足够了。

在这里查看这是如何生成的: http://werkzeug.pocoo.org/docs/utils/#werkzeug.security.generate_password_hash

您使用尴尬的术语:“脱盐”- 使用此方法,任何内容都不会以任何方式解密。

请稍微阅读一下这一切是如何运作的,您对用户的安全负责。

关于python - 散列密码从不淡化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13411766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com