我将在我的站点上使用sha256,以保护用户密码,并且由于盐问题,我正在考虑使用用户ID(int auto_increment).这将是唯一的,但不会很长且很费力,并且是public(user.php?id = 1),但重要的是它的唯一性对吗?
hash('sha256', $id . $password);
解决方法:
是的,盐的独特性(碰撞的可能性很小)很重要,但盐也应具有足够的熵(随机且足够长).用户ID不是随机的,并且可能太短,因此最好的选择是使用随机生成的字符串,并将它们与哈希一起存储在数据库中.
假设UID为9的用户选择一个愚蠢的密码:password.然后将要哈希的结果字符串可能是9password.您可以想象,即使在这种情况下,完整的字符串也可能会出现在rainbow tables(表中包含大量带有其原始字符串的哈希)的情况下.
如果在这种情况下的盐例如是OTAzMzYzODQzMjk5NTM1NDc1N,则要哈希的字符串是OTAzMzYzODQzMjk5NTM1NDc1Npassword,在彩虹表中不太可能出现.而且,输入字符串要长得多,从而降低了暴力攻击的风险.
标签:php,hash
来源: https://codeday.me/bug/20191012/1901778.html