Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这看起来像是密码的强盐吗_Php_Security_Hash_Salt - Fatal编程技术网

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最重要的作用是阻止预先计算的彩虹表(这段代码就是这么做的),所以它应该足够了

我通常把盐分成两部分:

  • 每个用户的每个随机部分,与散列一起存储在数据库中
  • 存储在配置文件中的每个应用程序的salt

  • 这样一来,只访问数据库而不访问配置文件的攻击者(如果攻击使用SQL注入,这可能是一种情况)仍然无法破解密码。

    长度是确保salt安全的主要因素。随机性并不是特别重要,只要它对每个用户都是不同的。无论如何,你最终都会以纯文本的形式存储它,这样你就可以在散列过程中使用它。

    你不需要让盐非常长,而且它们的加密安全性也不重要。SALT的目的只是让rainbow表攻击更加困难,因为密码和哈希之间不再有1对1的映射。(它们还使管理员眼睛迷糊,无法看到数据库中的482c811da5d5b4bc6d497ffa98491e38,然后知道Joe的密码是“password123”。)


    即使是一个4字节的salt也足够了,因为您现在已经有232个字节了&大约;任何密码都可能有40亿个哈希。

    值得指出的是,相同密码的40亿个不同哈希取决于哈希算法的适当选择。管理员难道没有访问源代码的权限吗?他不能把明文记录到文件里吗?@Graham Lee,我用的是SHA512。@Rook-是的。我说的是更随意的妥协,比如打开/etc/shadow,看到多个用户使用相同的散列,因此使用相同的密码。或者以出现在谷歌搜索结果()中的散列结束。你必须知道盐!这不仅仅是单向散列,而是一次性散列!这是没有用的。