【问题标题】:Can I md5(sha1(password))?我可以 md5(sha1(password)) 吗?
【发布时间】:2012-02-04 18:06:30
【问题描述】:

我目前正在编写自己的 CMS 并且处于密码状态...

我想知道我是否可以md5 一个密码然后sha1 它之后?

喜欢:

$password = md5(sha1(mysql_real_escape_string($_POST['passw'])));

【问题讨论】:

  • 可以计算任意字节序列的sha1的md5。为什么要问?
  • 我在问,因为我不想让我的 CMS 崩溃!那我可以吗?
  • 请注意,您不应该转义密码,当它们使用 md5、sha1 等字母数字散列进行散列时,它们不能包含任何有害字符 - 它可能会更改密码用户期望。
  • 你知道在你的例子中,你会得到一个MD5 字符串,而不是SHA1 吗?如果你想'sha1之后',你需要交换md5sha1
  • @Dan 虽然你后面的说法是对的,但前者不是。首先,它取决于输出格式和散列结果可能需要转义。其次,不去想是否必须转义字符串总是一个好习惯。应该是无条件的。对我来说是肯定的。

标签: php md5 sha1


【解决方案1】:

你可以md5任何你想要的数据,即使它之前已经过哈希处理。

但是,它只会增加冲突的风险,因为您现在正在处理较小的数据集。

你想达到什么目的?

【讨论】:

  • 我想要最好的密码安全性,没有 1000 行!
  • @FrederickMarcoux 通过较弱的 MD5 算法运行 SHA1 密码不会增加安全性。
  • 最好的安全性来自哈希函数本身的强度。然而,您可以很容易地做的是使用salts 来提高常用(即通常预先计算的)哈希函数值的强度;
  • 我怀疑数据集真的会更小
  • @YourCommonSense 请澄清数据集是否在重新散列时减少,因为答案大胆声称现在会增加碰撞风险?
【解决方案2】:

是的,你可以。 不,这没有意义。

链式哈希函数的安全性总是等于或小于最弱算法的安全性。

即md5(sha1($something)) 并不比 sha1($something) 更安全:如果您设法破坏 sha1,您将免费获得 md5,因为 shat($something) 和 sha1($faked_something) 具有相同的值,因此 md5ing 它们不会改变任何东西。

【讨论】:

    【解决方案3】:

    确保你也在那里添加了盐,这使得使用彩虹表来对抗你的客户/用户的密码变得更加困难。

    类似:

    $hashedPassword = sha1(md5($password) . $salt . sha1($salt . $password));

    salt 本身可以是一个不错的长随机字符串,可以是整个应用程序中的常量,也可以是每个联系人的 salt,它也与用户一起存储。

    【讨论】:

      【解决方案4】:

      你显然可以。我不明白你为什么不能。

      如果您想要更好的安全性,您应该考虑类似phpass

      【讨论】:

        【解决方案5】:

        您可以这样做,但没有真正的好处。如果您通过md5() 运行您的密码,您将通过添加加密盐获得更多安全性。

        What is SALT and how do I use it? 有更多相关信息。

        您可能经常听到的另一条建议是不要使用MD5SHA1 比较强,你只需要在你的数据库中修改你的密码字段来接受40个字符的字符串。

        【讨论】:

          猜你喜欢
          • 2011-08-11
          • 1970-01-01
          • 1970-01-01
          • 2013-02-02
          • 2011-09-07
          • 2015-06-29
          • 2021-07-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多