三部分问题:
我应该用什么?
$passwordHash = hash('ENCRYPTION',$salt . $password);
或
$passwordHash = hash('ENCRYPTION',$password . $salt);
我打算只存储论坛密码。我不存储银行凭证或任何其他高度敏感的物品。它应该是快速而不是火箭科学。
答案 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)
例如,我是某个系统的开发人员,并决定只存储login-n-password hash:
user1:qjwhegwqe7865weq786ew7q8 user2:kl21j3kl21j3kl21j3kl12jk user3:qjwhegwqe7865weq786ew7q8
正如你所看到的,没有盐坏人会看到,user1和user3有相同的密码。这就是盐被发明的原因 - 它创造了总是不同的哈希。它只是一个目的。