Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在不使用Flask Security的情况下验证它生成的哈希?_Python_Hash_Sha512_Pbkdf2_Flask Security - Fatal编程技术网

Python 如何在不使用Flask Security的情况下验证它生成的哈希?

Python 如何在不使用Flask Security的情况下验证它生成的哈希?,python,hash,sha512,pbkdf2,flask-security,Python,Hash,Sha512,Pbkdf2,Flask Security,我有一个正在运行的Flask应用程序,它具有Flask安全性。我的config.py文件如下所示: 。。。 #烧瓶安全配置 SECURITY_URL_PREFIX=“…”#我的URL前缀 安全性\u密码\u HASH=“pbkdf2\u sha512” SECURITY_PASSWORD_SALT=“…”#我的29个字符长的SALT ... 它在数据库上生成如下哈希: $pbkdf2-sha512$25000$pXROaU2JUSrlnDPm3BsjBA$CKSPSLS2SWPHL9DY7XD

我有一个正在运行的Flask应用程序,它具有Flask安全性。我的
config.py
文件如下所示:

。。。
#烧瓶安全配置
SECURITY_URL_PREFIX=“…”#我的URL前缀
安全性\u密码\u HASH=“pbkdf2\u sha512”
SECURITY_PASSWORD_SALT=“…”#我的29个字符长的SALT
...
它在数据库上生成如下哈希:

$pbkdf2-sha512$25000$pXROaU2JUSrlnDPm3BsjBA$CKSPSLS2SWPHL9DY7XDIAZH5YUCWQ27FWRUVJ4AOUC5DA2EZ5VH1LYZ5KJAZJSCAJYAFHWIWPHKASHIPORVRG

这是散列的密码
123456

在另一个应用程序中,我需要验证此散列,但通过使用Flask安全性,它要求我位于具有相同配置集的Flask应用程序中。
我已经尝试了很多方法,但如果没有Flask Security,我无法验证此密码,必须有一种方法来验证。

你们能帮我一下吗?

好的,多亏了@jwag和对Flask安全源代码的进一步挖掘,我终于做到了

对于那些处境相同的人,以下是我所做的:

导入hmac
导入hashlib
导入base64
从passlib.context导入CryptContext
文本类型=str
salt=“你的盐在这里”
def get_pw_context():
pw_hash='pbkdf2_sha512'
schemes=['bcrypt'、'des_-crypt'、'pbkdf2_-sha256'、'pbkdf2_-sha512'、'sha256_-crypt'、'sha512_-crypt'、'明文']
不推荐=['auto']
返回CryptContext(schemes=schemes,default=pw_hash,deprecated=deprecated)
def encode_字符串(字符串):
如果isinstance(字符串、文本类型):
string=string.encode('utf-8')
返回字符串
def get_hmac(密码):
h=hmac.new(encode_字符串(salt)、encode_字符串(密码)、hashlib.sha512)
返回base64.b64encode(h.digest())
def验证_密码(密码、哈希):
返回get_pw_context()。验证(get_hmac(密码),哈希)
#最后
验证密码(“我的密码”、“我的密码\u哈希”)

您没有说出您尝试过的内容。基本上-您需要查看源代码并从utils.py::verify_password()复制相关部分。请注意,默认情况下,Flask Security执行双哈希,因此需要复制get_hmac()。当然,还要设置一个passlib上下文。