Python 为什么werkzeugs'generate\u password\u hash'的输出不是常量?
当我多次运行Python 为什么werkzeugs'generate\u password\u hash'的输出不是常量?,python,flask,password-encryption,Python,Flask,Password Encryption,当我多次运行werkzeug.security.generate_password_hash(“相同密码”)()时,每次的输出都是不同的 我做错了什么?为什么它不是常数?密码是咸的,是的。在散列之前,会将salt添加到密码中,以确保散列在密码中不可用 由于每次调用函数时都会随机生成salt,因此生成的密码哈希也不同。返回的散列包含生成的salt,因此仍然可以正确验证密码 演示: 这两条弦不同;但包含足够的信息以验证密码,因为生成的salt包含在每个: # pbkdf2:sha1:1000$tYq
werkzeug.security.generate_password_hash(“相同密码”)
()时,每次的输出都是不同的
我做错了什么?为什么它不是常数?密码是咸的,是的。在散列之前,会将salt添加到密码中,以确保散列在密码中不可用
由于每次调用函数时都会随机生成salt,因此生成的密码哈希也不同。返回的散列包含生成的salt,因此仍然可以正确验证密码
演示:
这两条弦不同;但包含足够的信息以验证密码,因为生成的salt包含在每个:
# pbkdf2:sha1:1000$tYqN0VeL$2ee2568465fa30c1e6680196f8bb9eb0d2ca072d
^^^^^^^^^^^^^^^^ salt ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
algo info ^^^^^^^^ actual hash of the password
(PBKDF2 applied SHA1 1000 times)
因为随机salt是一个的tYqN0VeL
,而XHj5nlLU
,所以产生的散列也是不同的
foobar
密码仍然可以根据以下任一哈希值进行验证:
>>> 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
也看到
- (密码学.SE)
- (Security.SE)
>>> 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