Hash 有人认为他们可以破解这个散列函数吗?
我总是听说md5哈希是多么不安全,所以我写了这篇文章,希望它会更安全。。。我知道其他哈希,但我的问题是: 如果我用这个函数对密码进行散列存储,您认为有人可以反转或查找这些散列来解开这些密码吗Hash 有人认为他们可以破解这个散列函数吗?,hash,passwords,md5,Hash,Passwords,Md5,我总是听说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"
<?/*
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;
}
?>
第一个问题应该是,如果有行之有效的方案,你为什么要发明自己的方案?这看起来有点像PBKDF2,但并不完全相同
让我们检查一些细节:
参数$info
不是通过引用传递的,因此如果没有返回
,函数将不会执行任何操作
当$level=1时,您会进行多少次迭代,10001001次
您将如何验证密码,如何知道用过的盐和盐的级别,它们存储在哪里
如何生成安全的salt,它是可能包含\0个字符的二进制还是由PHPsrand()
函数生成的
所有这些细节看起来都像是小错误,但它表明了在密码安全方面犯错误是多么容易,一个小错误可能会破坏整个安全性。因此,请考虑使用PHP函数,它处理所有关于安全存储密码的困难部分:
// 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);
对
:任何人,从最无知的业余爱好者到最好的密码学家,都能创造出一种他自己无法破解的算法
现在来了迈克尔·奥尼尔,他认为自己可以做得更好
现有的哈希已由领域专家进行了密集的同行评审
对于散列密码,当前的最佳实践是(基于密码的密钥派生函数),请参阅。这是经过严格审查的
许多实现还提供了迭代次数的校准函数。使用phps密码哈希的唯一问题是,找到我的哈希的任何php程序员都可能认为我使用了密码哈希对密码进行哈希,然后能够直接跳入暴力攻击。@MichaelO'Neal Security不是通过保守方法秘密而获得,但实际上从未起作用。答案是众所周知的、经过严格审查的算法。PHP的密码\u散列很弱,这值得怀疑。缺点在于用户选择的密码。@MichaelO'Neal-这是一个合理的反对意见,归根结底,这始终是一个信任的问题,只要你自己不是密码学家。不过,对算法保密并不是一个好办法,有更好的方法可以添加额外的秘密,看看这个,或者在我的教程的末尾。