• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

sha256_crypt.encrypt总是返回另一个散列

python 来源:MisterMM23 3次浏览

我正在开发一个使用python和flask的webapp。它有一个用户系统,当然还有一个注册表。我正在使用,加密要注册的用户的密码,passlib.hash.sha256。以下是我在做什么:sha256_crypt.encrypt总是返回另一个散列

from passlib.hash import sha256_crypt as sha256 
[...] 
if request.method == "POST" and form.validate(): 
    username = request.form['username'] 
    password = request.form['password'] 
    confirm_password = request.form['confirm_password'] 
    email = request.form['email'] 

    password = sha256.encrypt(password) #Encryption. 



    c, conn = connection('accounts') #Connection to the database 


    x = c.execute("SELECT * FROM accounts WHERE username = '%s' OR email = '%s'" %(thwart(username), thwart(email))) 

    if x: 
     flash("We are very sorry, but this Username/Email-address is already taken. Please try again") 
    else: 
     c.execute('INSERT INTO accounts VALUES ("%s", "%s", "%s")' %(thwart(username), thwart(password), thwart(email))) 
     conn.commit() 
     flash('Succesfully Registered!') 

在数据库中,即使输入了相同的密码,散列总是变化。有人知道为什么吗?我究竟做错了什么?


===========解决方案如下:

Fristly,请注意自1.7版本sha256_crypt.encrypt(..)被弃用,而是改名为sha256_crypt.hash(..)所以你必须

hash = sha256_crypt.hash("password") 

创建哈希值。作为哈希包括随机盐,可以不重新计算哈希和比较,而不是你应该查找表中的散列值,然后在使用它sha256_crypt.verify(),如:

sha256_crypt.verify("password", hash) 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)