【问题标题】:Password hashing in php MD5php MD5中的密码散列
【发布时间】:2014-09-09 08:40:43
【问题描述】:

谁能告诉我这是怎么回事?

function hashmyshit($pass){

        for ( $i = 0; $i < 1000; $i++ ){
            MD5($pass);
        }
        return $pass;
}

以及如何多次迭代密码哈希过程。

【问题讨论】:

  • 你为什么要迭代密码?并且您返回的是 $pass 而不是加密的密码。
  • 您不应该使用md5() 来加密密码。现在远非安全。你可能想读这个:stackoverflow.com/questions/401656/…
  • 推荐的密码安全方法是使用 PHP 内置的 password_hash() 函数,或者对于早期版本的 PHP 使用 userland equivalent
  • RTFM,来吧...md5 返回一个字符串。多次拥有相同的东西并不能阻止 md5 不再安全这一事实
  • 另见 Openwall 的PHP password hashing framework (PHPass)。它的便携性和强化了针对用户密码的一些常见攻击。编写框架 (SolarDesigner) 的人与编写 John The Ripper 并在 Password Hashing Competition 担任评委的人是同一个人。所以他对密码攻击略知一二。

标签: php encryption hash md5


【解决方案1】:

你应该使用:

$pass = md5($pass);

而不是

MD5($pass);

但实际上,你想要达到什么目的?为什么要在 md5 已经完成的字符串上多次执行 md5?目的是什么?如果您只是想安全地加密密码,您应该使用password_hash() 函数选择用户更好的加密方法。

多次使用相同的加密功能甚至可能导致攻击者更容易进入您的系统,因此您不应该这样做。

【讨论】:

  • 谢谢,我不知道为什么我没想到这样做。
  • 我读过最好加密多次,而不是只加密一次。我是否一直在阅读虚假信息?
  • @user3723666 - 非常简单,重复的 MD5 哈希实际上降低了熵....
  • @user3723666 - 使用哈希算法进行迭代称为键拉伸,确实是一件好事。背后的想法是,您可以控制攻击者计算单个哈希值所需的必要时间。迭代并不意味着愚蠢的 for 循环,MD5 不适合散列密码,也不是提到的 hash() 函数。对于 PHP,您应该使用函数 password_hash()。还有一个compatibility pack
  • @MarcinNabiałek - 函数password_hash() 实现了 BCrypt 算法,该算法具有控制迭代次数的成本因素。 hash() 函数可用于计算简单算法,例如 MD5 / SHA*,这些算法对于散列密码来说太快了。例如,您可以尝试 8 Giga MD5 passwords per second 使用普通硬件。
【解决方案2】:

因此,如果您想将密码哈希 1000 次,那么您可以这样做:

function hashmyshit($pass){
    $password = $pass;
    for ( $i = 0; $i < 1000; $i++ ){
        $password = md5($password);
    }
    return $password;
}

之前您尝试对相同的 $pass 进行 1000 次哈希处理。 但正如@Marcin Nabiałek 所说,这不是保护密码的合适方法,您应该使用内置加密。

【讨论】:

    【解决方案3】:

    我强烈避免使用 MD5,因为在算法中发现了许多加密弱点以及其他明显的原因,Philipp 很乐意在下面的帖子中详细说明;

    https://security.stackexchange.com/questions/52461/how-weak-is-md5-as-a-password-hashing-function

    尝试 BCrypt 代替

    Andrew Moore 在这篇文章中解释了如何在 PHP 中使用 bcrypt 对密码进行哈希处理?

    How do you use bcrypt for hashing passwords in PHP?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-24
      • 2016-11-03
      • 1970-01-01
      • 2014-11-18
      • 2012-04-19
      • 2015-08-13
      • 2012-05-30
      • 1970-01-01
      相关资源
      最近更新 更多