当前位置: 首页 > 面试题库 >

为什么werkzeugs`generate_password_hash`的输出不是恒定的?

田彬郁
2023-03-14
问题内容

当我多次werkzeug.security.generate_password_hash("Same password")(docs)运行时,每次输出都不同。

我究竟做错了什么?为什么不是恒定的?


问题答案:

由于每次调用该函数时都会随机生成盐,因此生成的密码哈希也不同。返回的哈希值包含生成的盐,因此仍可以正确验证密码。

演示:

>>> from werkzeug.security import generate_password_hash
>>> generate_password_hash('foobar')
'pbkdf2:sha1:1000$tYqN0VeL$2ee2568465fa30c1e6680196f8bb9eb0d2ca072d'
>>> generate_password_hash('foobar')
'pbkdf2:sha1:1000$XHj5nlLU$bb9a81bc54e7d6e11d9ab212cd143e768ea6225d'

这两个字符串不同。但包含足够的信息来验证密码,因为生成的盐包含在每个密码中:

# pbkdf2:sha1:1000$tYqN0VeL$2ee2568465fa30c1e6680196f8bb9eb0d2ca072d
  ^^^^^^^^^^^^^^^^   salt   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      algo info    ^^^^^^^^        actual hash of the password
  (PBKDF2 applied SHA1 1000 times)

Because the random salt is tYqN0VeL for one and XHj5nlLU, the resulting hash is also different.

The foobar password can still be verified against either hash:

>>> from werkzeug.security import check_password_hash
>>> check_password_hash('pbkdf2:sha1:1000$tYqN0VeL$2ee2568465fa30c1e6680196f8bb9eb0d2ca072d', 'foobar')
True
>>> check_password_hash('pbkdf2:sha1:1000$XHj5nlLU$bb9a81bc54e7d6e11d9ab212cd143e768ea6225d', 'foobar')
True


 类似资料:
  • 我目前正试图深入研究Java虚拟机的规范。我一直在网上阅读JVM书籍,其中有一个令人困惑的抽象我似乎无法理解:常量池。以下是这本书的摘录: 对于加载的每种类型,Java虚拟机都必须存储一个常量池。常量池是类型使用的一组有序常量,包括文本(字符串、整数和浮点常量)以及对类型、字段和方法的符号引用。常量池中的条目由索引引用,很像数组的元素。因为常量池包含对类型使用的所有类型、字段和方法的符号引用,所以

  • 它给出的输出为“cricket”。但我不明白为什么?http://ideone.com/fteahg

  • 为什么它的输出是无限的?有人知道应该做些什么来使这个有限吗?

  • 我是XSLT新手。我试图在XML 1.0中解析结果并生成: 但没有显示分隔符。我刚得到结果 我的XML和XSLT代码如下: Product.xml style.xsl 我已经看过XSLT中的if-else语句,但找不到答案。

  • 问题内容: 查看以下代码,并请解释为什么该方法和函数给出两个不同的输出。 输出: 问题答案: 计算子字符串的非重叠出现次数: 返回substring sub 的不重叠出现的次数。 在字符串中恰好有一个这样的子字符串出现的位置:就在开头。因此计数 应该 返回。 一般来说,空字符串将匹配给定字符串中的 所有位置 ,包括开始和结束处的正确 位置 ,因此计数应 始终 为长度加1: 这是因为空字符串被认为存

  • 问题内容: 我正在尝试该功能。 从numpy文档中,我了解到,如果仅给出一个数组作为输入,它应该返回该数组非零的索引(即“ True”): 如果仅给出条件,则返回元组condition.nonzero(),其中condition为True的索引。 但是,如果尝试一下,它将返回一个包含两个元素的 元组 ,其中第一个是所需的索引列表,第二个是空元素: 所以问题是:为什么?这种行为的目的是什么?在什么情