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

use*_*059 2 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'])
Run Code Online (Sandbox Code Playgroud)

但想像这样解密:

application = Flask(__name__)
from werkzeug.security import generate_password_hash, check_password_hash
if check_password_hash(user.password, password):
    pass
Run Code Online (Sandbox Code Playgroud)

示例(虚拟)哈希:

$2b$12$98WSJfIg.YkR/Bn469IX4OlOCJx.HMWKxR8NysSynGa8QHf/4rawq
Run Code Online (Sandbox Code Playgroud)

我会使用 Bcrypt 库,但由于http://stackoverflow.com/questions/41854768/flask-bcrypt-attributeerror-module-object-has-no-,我无法让它与 Elastic Beanstalk 一起使用属性-ffi-部署

Sue*_*ver 6

不,你不能这样做。这就是首先使用Bcrypt加密密码的全部意义。如果您能够从散列中恢复密码,那么任何对数据库的破坏都会导致用户的凭据被访问,并且散列并不比以明文形式存储密码更好。在此处查看有关密码散列的更多信息。

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

import bcrypt
isSamePassword = bcrypt.hashpw(new_password, stored_hash)
Run Code Online (Sandbox Code Playgroud)