当我多次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的索引。 但是,如果尝试一下,它将返回一个包含两个元素的 元组 ,其中第一个是所需的索引列表,第二个是空元素: 所以问题是:为什么?这种行为的目的是什么?在什么情