【发布时间】:2015-09-26 17:15:17
【问题描述】:
有没有办法从输入字符串生成密码以使结果始终相同?像 md5 哈希但带有特殊字符?
【问题讨论】:
-
这样做的应用是什么?
-
我想用它为具有主密码的网站生成密码。我想给它我的主密码和网站名称,它应该为每个网站生成一个唯一且安全的密码。
有没有办法从输入字符串生成密码以使结果始终相同?像 md5 哈希但带有特殊字符?
【问题讨论】:
为什么会有特殊字符?
特殊字符被添加到密码中以增加其熵,但哈希永远不会增加熵,因为它仅取决于输入。
例如。如果您知道 special_characters_password_generator() 函数的输入始终是 0..255 范围内的数字,那么无论如何您在输出中将只有 8 位熵。或者换句话说,无论如何,您总是会生成 256 个密码之一。这样做的一个原因是要有一个人类可读但更紧凑的表示。
也许您想使用比 0-9A-F 更多的字符来表示哈希(毕竟这只是一个位序列),例如,您可以使用 base64 模块对哈希函数的输出进行编码:
import hashlib, base64
print base64.b85encode(hashlib.sha256(b"hello world").digest())
# output: b'xlJdzlTAJdr7lv}+I_3~#DwqTdQ*VzkcjuJ;_uDr'
在hashlib 的较新版本中可以找到pbkdf2_hmac(也可作为pip 中的反向端口),这是一种更好的散列(或“派生密钥”,正确地说)密码的方法。