我总是听说md5哈希是多么不安全,所以我写了这篇文章,希望它更安全......我知道其他哈希,但我的问题是:
如果我通过此函数存储了我的密码哈希,你认为任何人都可以反转或查找这些哈希值,以便对这些密码进行反混淆吗?
<?/*
Script Written By Michael O'Neal on 12/12/2015
How to use:
$info = "Info to destroy"
$salt = "Something to add to $info to spice it up"
$level = "how many repetitions of 1000 to hash $info with salt"
*/
function destroy($info, $salt, $level){
for($i=0;$i!=($level*1000)+1;$i++){
$info = md5($info.$salt);
}
return $info;
}
?>
答案 0 :(得分:1)
第一个问题应该是,如果有经证实的方案,你为什么要发明自己的方案?这看起来有点类似于PBKDF2,但并不完全相同。
让我们来看看一些细节:
$info
未通过引用传递,因此如果没有return
,则您的函数不会执行任何操作。rand()
函数生成的?所有这些细节可能看起来都是小错误,但它表明在密码安全性方面犯错是多么容易,而一个小错误可能会破坏整个安全性。所以请考虑使用PHP函数password_hash(),它处理有关安全存储密码的所有困难部分:
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);
// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);
答案 1 :(得分:0)
是
"Schneier's Law":从最无能的业余爱好者到最好的密码学家,任何人都可以创建一个他自己无法破解的算法。
迈克尔奥尼尔现在认为他可以做得更好。
领域专家对现有的哈希进行了密集的同行评审。
对于散列密码,当前的最佳做法是PBKDF2(基于密码的密钥派生函数)请参阅NIST Special Publication 800-132。它经过了很好的审查。
许多实现还提供了迭代次数的校准函数。