使用sha256作为散列和使用用户ID进行腌制

1 php hash

我将在我的网站上使用sha256来保护我的用户密码,并且我正在考虑使用用户id(int auto_increment).这将是独一无二的,但不是很长很难,而且是公共的(user.php?id = 1),但它的独特权利是否重要?

hash('sha256', $id . $password);
Run Code Online (Sandbox Code Playgroud)

mol*_*olf 8

是的,重要的是盐是独特的(碰撞不太可能),但它也应该有足够的熵(随机和足够长).用户ID不是随机的,可能太短,所以最好的办法是使用随机生成的字符串并将它们与哈希一起存储在数据库中.

假设有UID的用户9选择了一个愚蠢的密码:password.然后可以进行散列的结果字符串9password.您可以想象,即使在这种情况下,完整的字符串也可能出现在彩虹表中(包含许多散列及其原始字符串的表格).

例如,如果在这种情况下盐是OTAzMzYzODQzMjk5NTM1NDc1N要散列的字符串,那么OTAzMzYzODQzMjk5NTM1NDc1Npassword在彩虹表中更不可能出现.此外,输入字符串更长,降低了暴力攻击的风险.