sha256_crypt.encrypt总是返回另一个哈希

时间:2017-12-18 11:09:28

标签: python encryption sha256

我正在使用python和flask开发一个webapp。它有一个用户系统,当然还有注册表。我正在使用,加密想要注册的用户的密码,passlib.hash.sha256。这就是我在做的事情:

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!')

在数据库中,即使输入了相同的密码,哈希值也总是不同的。有人知道为什么吗?我做错了什么?

3 个答案:

答案 0 :(得分:2)

请注意,自{1.7}版以来,sha256_crypt.encrypt(..)已被弃用,而是重命名为sha256_crypt.hash(..),因此您

hash = sha256_crypt.hash("password")

用于创建哈希。由于哈希包含随机盐,因此您无法重新计算哈希值并进行比较,而应该在表中查找哈希值,然后在sha256_crypt.verify()中使用它:

sha256_crypt.verify("password", hash)

答案 1 :(得分:1)

检查您的数据库结构。 sha256可能需要多达70个值。 将密码字段增加到大约100个值。

答案 2 :(得分:-1)

尝试使用pycrypto。sha256,而passlib似乎不是您计算未加盐的哈希值的正确解决方案。