如何不使用Flask-Security验证散列?

加布里埃尔·米兰(Gabriel Milan)

我运行的Flask应用程序具有Flask-Security。我的config.py文件如下所示:

...

# Flask-Security config
SECURITY_URL_PREFIX = "..." # my URL prefix
SECURITY_PASSWORD_HASH = "pbkdf2_sha512"
SECURITY_PASSWORD_SALT = "..." # my 29-character long salt

...

并在数据库上生成如下所示的哈希:

$pbkdf2-sha512$25000$pXROaU2JUSrlnDPm3BsjBA$ckspsls2SWPhl9dY7XDiAZh5yucWq27fWRuVj4aOUc5dA2Ez5VH1LYiz5KjaZJscaJYAFhWIwPhkAsHiPOrvrg

这是123456哈希密码

在另一个应用程序中,我需要验证此哈希,但是通过使用Flask-Security,它要求我位于具有相同配置集的Flask应用程序中。
我已经尝试了很多事情,但是没有Flask-Security我无法验证此密码,并且必须有一种方法可以做到这一点。
你们能帮我吗?

加布里埃尔·米兰(Gabriel Milan)

好的,感谢@jwag以及对Flask-Security源代码的更多探索,我已经成功做到了。

对于那些处于相同情况的人,这是我的工作:

import hmac
import hashlib
import base64
from passlib.context import CryptContext

text_type = str
salt = "YOUR_SALT_HERE"

def get_pw_context ():
  pw_hash = 'pbkdf2_sha512'
  schemes = ['bcrypt', 'des_crypt', 'pbkdf2_sha256', 'pbkdf2_sha512', 'sha256_crypt', 'sha512_crypt', 'plaintext']
  deprecated = ['auto']
  return CryptContext (schemes=schemes, default=pw_hash, deprecated=deprecated)

def encode_string(string):
  if isinstance(string, text_type):
    string = string.encode('utf-8')
  return string

def get_hmac (password):
  h = hmac.new(encode_string(salt), encode_string(password), hashlib.sha512)
  return base64.b64encode(h.digest())

def verify_password (password, hash):
  return get_pw_context().verify(get_hmac(password), hash)

# Finally
verify_password ("MY_PASSWORD", "MY_PASSWORD_HASH")

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何不使用PagingAndSortingRepository返回特定的列

当您具有colnames的字符向量时,如何不使用select()dplyr选择列?

如何不使用for循环而参考列索引向量更改矩阵的元素?

如何不使用strptime转换data.table中不明确的datetime列?

在 Corda 中,附件是如何散列和验证的?

使用PHP散列后无法验证密码

如何查看数据框中是否存在列名,以及如何不使用默认值创建列?

如何不使用触发器和审计就知道Oracle 11g中的表中更新了哪些列

使用 JavaScript 使用随机盐散列密码并从 C# 验证

不使用UsernamePasswordAuthenticationToken的Spring Security JWT验证

如何在散列之前验证最小,最大密码长度?

如何针对盐和散列的密码和用户名对用户进行身份验证?

使用带有现有散列密码的 Django 身份验证系统

JDBCRealm中使用带有散列密码的tomcat基本/摘要身份验证的方法?

使用Flask wtforms验证器而不使用表单

如何不使用sendkeys登录网站?

如何不使用toLocaleString显示秒

Ping如何不使用传输协议?

嘲笑时如何不使用接口?

如何不使用localStorage进行重构?

如何不使用androidX破坏片段

如何不使用XHR加载vectorSource

如何不使用.val('')清除textarea

如何不使用绝对定位CSS

如何不使用make构建gcc?

Scala,如何不使用 None

如何不使用 CSS 显示元素

如何不使用 compare_length_with

如何在不使用“权限”的情况下使用Spring Security的JDBC身份验证?