Hash 有人认为他们可以破解这个散列函数吗?

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"

我总是听说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;
  }
?>

第一个问题应该是,如果有行之有效的方案,你为什么要发明自己的方案?这看起来有点像PBKDF2,但并不完全相同

让我们检查一些细节:

  • 参数
    $info
    不是通过引用传递的,因此如果没有
    返回
    ,函数将不会执行任何操作
  • 当$level=1时,您会进行多少次迭代,10001001次
  • 您将如何验证密码,如何知道用过的盐和盐的级别,它们存储在哪里
  • 如何生成安全的salt,它是可能包含\0个字符的二进制还是由PHPs
    rand()
    函数生成的
  • 所有这些细节看起来都像是小错误,但它表明了在密码安全方面犯错误是多么容易,一个小错误可能会破坏整个安全性。因此,请考虑使用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-这是一个合理的反对意见,归根结底,这始终是一个信任的问题,只要你自己不是密码学家。不过,对算法保密并不是一个好办法,有更好的方法可以添加额外的秘密,看看这个,或者在我的教程的末尾。