【问题标题】:what does MD5 do with my password string?MD5 如何处理我的密码字符串?
【发布时间】:2011-06-26 22:43:18
【问题描述】:

我设置了我的密码“13579”,身份验证模式表单将其转换为 MD5,如“mEXg8klnq0TwPFvAqytULA==”,但几分钟后我再次尝试使用相同的密码“13579”创建另一个,但它转换为不同的像“uM4gH8HO8cvoE0slg6OyKA==” MD5的结构是什么?它与我的用户名和时间有关吗?我想为我的用户创建相同的密码,所以如果取决于时间,我无法创建相同的密码。

【问题讨论】:

  • 我会告诉你它不能做什么:安全地存储它。
  • 这并不完全正确。碰撞攻击可能是数字签名和完整性验证的问题,更不用说密码了(提示:尝试通过验证的密码字段获取碰撞数据)。尽管存在更好的替代方案(例如 Blowfish),但可以假设使用 MD5 散列的精心挑选的加盐密码非常安全。

标签: .net md5


【解决方案1】:

您的密码已被 ASP.NET Membership 提供程序加盐 - 看看您的数据库,用户表中会有一个包含加盐的列。 Provider 为每个用户生成 salt 并将其存储在表中。然后使用此盐对密码进行加密。由于每个用户的盐值不同,因此明文中的相同密码在加密时会有所不同。

您可能希望使用不加盐的提供程序 - 尝试在谷歌上搜索“ASP.NET Membership Provider no salt”,但您最终可能会继承您自己的提供程序。我认为 web.config 中的提供程序设置没有选项可以关闭加盐功能。

【讨论】:

    【解决方案2】:

    MD5 是一种确定性算法,因此您可能会遇到“salted hashes”。这意味着,一些字符串或其他数据(例如时间戳)在密码中被编码为“盐”以加强它。

    在数据库中查找名为 salt 的数据库列,检查密码的 md5 结果并附加创建日期时间戳以找到 salt。

    【讨论】:

      【解决方案3】:

      最终的形式不是 MD5 而是 BASE-64,MD5 哈希看起来像这样:9e107d9d372bb6826bd81d3542a419d6

      MD5 确实应该在给定相同输入参数的情况下生成相同的哈希,但是如果没有具体的实现细节,很难说是什么导致了你看到的差异。

      很可能是某种盐值发生了变化,如果您不确定盐值是什么,请参阅here

      【讨论】:

        【解决方案4】:

        您会在字符串末尾看到那些 == 符号。那是 Base64 转换后的字符串。而 = 符号用于填充。

        至于你得到的字符串。 这是不同的,因为 ASP.Net 成员资格提供程序为每个不同的用户分配了一个不同的盐,因此即使用户名相同,您也会得到不同的哈希值。

        但是无论如何,如果您为两个用户设置了相同的密码,您可以使用相同的密码登录.. 因为在内部 Salt 和相同密码的混合始终匹配各自的哈希值。

        【讨论】:

          【解决方案5】:

          MD5 的结果是一致的,但是你可能会发现用户名也被使用了,所以差异是因为用户名不同。 (时间没有用,因为您无法将散列密码与任何内容进行匹配)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-06-21
            • 2010-11-17
            • 2012-10-13
            • 2021-12-11
            • 1970-01-01
            • 1970-01-01
            • 2019-07-10
            相关资源
            最近更新 更多