我可以使用werkzeug.security的check_password_hash解密Bcrypt哈希密码吗?

时间:2017-01-25 16:45:03

标签: python bcrypt werkzeug

是否可以使用以下方法解密以前的哈希密码:

Bcrypt - $2b$12$

使用时:

from werkzeug.security import generate_password_hash, check_password_hash

我有点假设如果我可以指定哪个哈希算法werkzeug.security应该用来检查密码,那么即使它们是不同的工具也可以工作。

也许我很天真。

我像这样加密了密码:

application = Flask(__name__)
bc = Bcrypt(application)
password=bc.generate_password_hash(data['password_input'])

但是想像这样解密:

application = Flask(__name__)
from werkzeug.security import generate_password_hash, check_password_hash
if check_password_hash(user.password, password):
    pass

示例(虚拟)哈希:

$2b$12$98WSJfIg.YkR/Bn469IX4OlOCJx.HMWKxR8NysSynGa8QHf/4rawq

我会使用Bcrypt库,但由于http://stackoverflow.com/questions/41854768/flask-bcrypt-attributeerror-module-object-has-no-attribute-ffi-deployed,我无法使用Elastic Beanstalk。

1 个答案:

答案 0 :(得分:1)

不,你不能这样做。这就是首先使用Bcrypt加密密码的重点。如果您能够从哈希中恢复密码,那么任何违反数据库的行为都将导致用户的凭据可访问,并且散列不会比以明文形式存储密码更好。详细了解密码哈希here

您可以做的就是接受新的密码尝试,对其进行哈希处理,并将哈希值与已知哈希值进行比较。 check_password_hash无法处理Bcrypt哈希值,因此您需要使用bcrypt.hashpw来执行此操作

import bcrypt
isSamePassword = bcrypt.hashpw(new_password, stored_hash)