|
|
1
9
要回答您的附带问题:还要将算法ID(可能是一个简单的数字,可能是一个名称字符串)与数据一起存储。升级时,使用新的首选算法散列新密码,但保留旧算法,直到每个人都更改了密码并且没有使用旧算法存储的密码。再说一次,这不一定是秘密-它只允许你适应世界的变化。显然,如果旧的算法突然暴露为毫无价值,那么您应该考虑使用增量方法是否可行。但除非发生类似戏剧性的事情,否则逐步采用新机制的效果相当不错。尽量不要频繁地更改算法,以至于一次有三个或更多的算法在运行——尽管没有技术上的原因说明方案无法管理它。还要尝试设计您的数据库,以便哈希大小可以增长而不会引起混乱(因此允许从64字节扩展到128字节,或从128字节扩展到256字节,或…)。 |
|
|
2
8
是的,盐只是用来防止对散列密码的彩虹攻击。通常我对所有密码使用一个salt值。它存储在我的源代码或配置中,所以不在数据库中。但对每个用户使用不同的盐可能更好。这样,具有相同密码的两个用户将不会得到相同的哈希值。 您可以简单地将salt和密码一起存储在数据库中。salt的目标是不能预计算彩虹表。那会花太多时间。更多的时间不只是直接强制输入密码。即使已知盐,也必须生成盐的完整彩虹表,这是非常昂贵的。所以,盐是否已知并不重要。 你怎么选盐并不重要,只要你确定它足够长。根据维基百科(Wikipedia)的说法,12位散列(旧unix密码使用的)非常昂贵,但可能会失败。128位(如MD5所使用的)在可预见的将来太昂贵而无法消除。 另请参见: http://en.wikipedia.org/wiki/Rainbow_table#Defense_against_rainbow_tables |
|
|
3
4
盐不是秘密。它们可以与散列的salt+密码一起以明文形式存储。散列被咸化以避免字典攻击。将随机值与密码一起存储或将用户名与密码一起散列都是有效的选项。不过,我还是建议
哈希方案,即HTTP
Digest HA1
在人们开始谴责使用MD5而不是SHA1之前(按照HTTP摘要方案散列的要求),但是为摘要方案提供按需MD5散列冲突在可预见的将来仍然是不可行的,并且自动访问的附加好处(比如WebRequest、curl等)也不容忽视。 |
|
|
AlwaysneedsHelp · 如何减少此处使用的内存量? 2 年前 |
|
|
snake123 · 滚动到不同页面的锚点,URL中没有# 2 年前 |
|
|
Jan · 密码salt是否应存储在数据库中 2 年前 |
|
|
birb · RFC-6238 TOTP实现与示例不匹配 2 年前 |
|
|
AishaWho · 请解释res=id^(id>>>32) 3 年前 |
|
|
landings · 如何散列整数的环形缓冲区? 3 年前 |