我将在我的网站上使用 sha256,以保护我的用户密码,并且作为盐,我正在考虑使用用户 ID(int auto_increment)。这将是独特的,但不是很长和困难,并且公开(user.php?id = 1),但它是否唯一很重要,对吧?
hash('sha256', $id . $password);
是的,重要的是盐是唯一的(碰撞不太可能),但它也应该有足够的熵(随机且足够长)。用户 ID 不是随机的,并且可能太短,因此最好的选择是使用随机生成的字符串并将它们与哈希值一起存储在数据库中。
假设一个用户有UID9
选择一个愚蠢的密码:password
。将被散列的结果字符串可能是9password
。您可以想象,即使在这种情况下,完整的字符串也可能出现在彩虹桌 http://en.wikipedia.org/wiki/Rainbow_table(包含大量哈希值及其原始字符串的表)。
例如,如果本例中的盐是:OTAzMzYzODQzMjk5NTM1NDc1N
,要散列的字符串是OTAzMzYzODQzMjk5NTM1NDc1Npassword
,这不太可能出现在彩虹表中。此外,输入字符串更长,降低了暴力攻击的风险。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)