这看起来像密码的强盐

sam*_*ami 5 php security hash salt

这看起来像是一个安全的盐与密码一起使用?任何改进或建议或明显的缺陷?

$salt = '';
for ($i = 0; $i < 50; $i++) {
   $salt .= chr(rand(33, 126));
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 8

你不需要长时间制作盐,并且它们在加密方面是安全的并不重要.盐点只是为了让彩虹表攻击变得更难,因为你不再在密码和哈希之间进行一对一的映射.(他们还让管理员在数据库中看到482c811da5d5b4bc6d497ffa98491e38,然后知道Joe的密码是"password123".

即使是一个4字节的盐就足够了,因为你现在拥有2 个32 ×40亿个潜在的任何密码哈希值.


Cod*_*aos 5

我认为rand不是一个好的PRNG.如果我没记错的话,它直接映射到c PRNG,在许多实现中,它有一个非常小的(如32位)内部状态.

它也没有播种.但是,由于盐的最重要的作用是阻止预先计算的彩虹表,这个代码就是这样,它应该就足够了.

我通常将盐分成两部分:

  1. 每个随机的每个用户部分,与哈希一起存储在数据库中
  2. 每个应用程序盐,存储在配置文件中.

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