用于存储密码的哈希技术

时间:2011-05-09 13:13:47

标签: php encryption

  

可能重复:
  Secure hash and salt for PHP passwords

三部分问题:

  • 我应该使用哪种技术来存储密码? (sha1,sha256 / 512等)
  • 盐的理想大小是多少?
  • 我应该用什么?

    $passwordHash = hash('ENCRYPTION',$salt . $password);    
    

     $passwordHash = hash('ENCRYPTION',$password . $salt);
    

我打算只存储论坛密码。我不存储银行凭证或任何其他高度敏感的物品。它应该是快速而不是火箭科学。

4 个答案:

答案 0 :(得分:2)

我使用的是MD5,但由于它已知为broken,我现在使用SHA-2

$hash = hash('sha256', $pass); - creates 256 bit hash.

答案 1 :(得分:2)

就我个人而言,我仍然使用MD5 - 它非常快速且广泛实施。

虽然安全研究人员已经找到了一种方法来制作两个文本块,导致相同的MD5哈希(“碰撞攻击”),但是没有已知的实用方法来创建一个产生特定哈希的文本块(a “pre-image attack”)

确保你确实有一个不错的长度盐(16个随机字节应该足够),以确保黑客不能使用“彩虹表”来反转你的哈希值。

答案 2 :(得分:0)

在我看来,如果可以使用的话,你应该使用SHA512,因为它是目前最强大的哈希算法之一。

关于salt大小,我会使用与hash相同的大小,因为它会为hash添加更多的熵。我将uniqid()函数与rand()函数

结合使用

我会使用类似于下面的代码

<?php
    $password = 'password';
    //Generate the salt
    $salt = hash('sha512',uniqid('',true) . rand());
    //Hash our password with the salt
    $passwordHash = hash('sha512',$salt . $password);
?>

答案 3 :(得分:0)

  1. 任何你所说的 - 它不那么敏感
  2. 任何,但如果你想要精确的数字,那就让它为32
  3. 任何,因为盐的主要目的不是让坏人确定,两个密码是否相同。
  4. 例如,我是某个系统的开发人员,并决定只存储login-n-password hash:

    user1:qjwhegwqe7865weq786ew7q8
    user2:kl21j3kl21j3kl21j3kl12jk
    user3:qjwhegwqe7865weq786ew7q8
    

    正如你所看到的,没有盐坏人会看到,user1和user3有相同的密码。这就是盐被发明的原因 - 它创造了总是不同的哈希。它只是一个目的。