Php 这看起来像是密码的强盐吗
这看起来像是一个安全的盐与密码一起使用吗?有什么改进、建议或明显的缺陷吗Php 这看起来像是密码的强盐吗,php,security,hash,salt,Php,Security,Hash,Salt,这看起来像是一个安全的盐与密码一起使用吗?有什么改进、建议或明显的缺陷吗 $salt = ''; for ($i = 0; $i < 50; $i++) { $salt .= chr(rand(33, 126)); } $salt=''; 对于($i=0;$i
$salt = '';
for ($i = 0; $i < 50; $i++) {
$salt .= chr(rand(33, 126));
}
$salt='';
对于($i=0;$i<50;$i++){
$salt.=chr(33126兰特);
}
我会使用mt\u rand
,因为它速度更快,但这对盐来说绝对足够。我认为rand
不是一个好的PRNG。如果我没记错的话,它直接映射到c PRNG,在许多实现中,c PRNG的内部状态非常小(比如32位)
而且它的种子也不是很好。但是,由于salt最重要的作用是阻止预先计算的彩虹表(这段代码就是这么做的),所以它应该足够了
我通常把盐分成两部分:
这样一来,只访问数据库而不访问配置文件的攻击者(如果攻击使用SQL注入,这可能是一种情况)仍然无法破解密码。长度是确保salt安全的主要因素。随机性并不是特别重要,只要它对每个用户都是不同的。无论如何,你最终都会以纯文本的形式存储它,这样你就可以在散列过程中使用它。你不需要让盐非常长,而且它们的加密安全性也不重要。SALT的目的只是让rainbow表攻击更加困难,因为密码和哈希之间不再有1对1的映射。(它们还使管理员眼睛迷糊,无法看到数据库中的482c811da5d5b4bc6d497ffa98491e38,然后知道Joe的密码是“password123”。)
即使是一个4字节的salt也足够了,因为您现在已经有232个字节了&大约;任何密码都可能有40亿个哈希。值得指出的是,相同密码的40亿个不同哈希取决于哈希算法的适当选择。管理员难道没有访问源代码的权限吗?他不能把明文记录到文件里吗?@Graham Lee,我用的是SHA512。@Rook-是的。我说的是更随意的妥协,比如打开/etc/shadow,看到多个用户使用相同的散列,因此使用相同的密码。或者以出现在谷歌搜索结果()中的散列结束。你必须知道盐!这不仅仅是单向散列,而是一次性散列!这是没有用的。