我正在尝试追加随机生成的盐以及我的md5生成的密码。那么我们如何重新检查盐渍密码呢?我们是否需要在Db中保存盐和密码。这是一个很好的方法。
$pass='password';
$salt = substr(str_shuffle('0123456789abcdefghijklmnopqrstuvwxyz'), 0, 12);
echo md5($pass.$salt);
另外请告诉我这是否是正确的腌制方式???
答案 0 :(得分:8)
盐的一点是避免彩虹表攻击或预先计算的密码哈希值。为了检查旧密码,您需要使用与其密码相同的盐,因此您需要存储它,例如在DB中。
Md5不是一个强大的加密哈希,你可能最好使用bcrypt。有一个免费的PHP实现http://www.openwall.com/phpass/。
这将有更强烈的腌制和散列。
答案 1 :(得分:7)
我们是否需要在Db中保存盐和密码。
是
另请注意,所有这些浪漫的散列腌制内容都绝对与您的网站安全无关
答案 2 :(得分:2)
吃盐很好。现在,您生成和存储它的方式取决于您。您也可以只存储上次登录的日期和时间并将其用作盐 - 这样您就不会显式存储盐,并且每次新登录都会随之更改(当然,这也意味着密码哈希总是不同的)。这完全取决于你。
你实际上可能有几种盐 - 可能有一种或多种来自数据库(MD5(last_login),SHA1(用户名)......),另一种来自PHP应用程序中的硬编码。
答案 3 :(得分:0)
只要它不是所有密码的共享盐,您需要将其存储到数据库或从不会更改的值(e.x.用户ID)生成。
您可以在salt字段或哈希本身中执行此操作(有关良好的实现示例,请参阅phpass)
简而言之:一般都是!
答案 4 :(得分:0)
我想说你需要将它保存在数据库中。你怎么能节省随机盐? 有关详情,请查看:http://crackstation.net/hashing-security.html
答案 5 :(得分:0)
是的,将salt
存储在数据库中非常重要 - 如果数据库中salt
被泄露,那么验证密码的单向加密将失败,所以不用担心。