【问题标题】:Algorithm behind MD5CryptMD5Crypt 背后的算法
【发布时间】:2010-09-06 14:45:14
【问题描述】:

我正在使用基于 Windows 的 Subversion,并且想在 .NET 中编写一个简单的实用程序来处理 Apache 密码文件。我知道它使用了一个称为 MD5Crypt 的函数,但我似乎找不到该算法的描述,除此之外,它有时使用 MD5 创建哈希。

有人能描述一下 MD5Crypt 算法和密码行格式吗?

【问题讨论】:

    标签: .net svn apache md5 crypt


    【解决方案1】:

    您可以在 tcllib package. 中找到 md5crypt 的实现,下载地址可从 sourceforge 获得。

    您还可以在source code for the CAS Generic Handler 中找到与 apache 兼容的 md5crypt 示例

    【讨论】:

      【解决方案2】:

      MD5Crypt 基本上是老式 unix crypt 函数的替代品。它是在 freebsd 中引入的,并已被其他团体采用。

      基本思路是这样的:

      • 哈希是存储密码的好方法
        • 您获取用户输入的密码并对其进行哈希处理
        • 将其与存储的哈希进行比较
        • 如果哈希值相同,则密码匹配

      但是有一个问题:

      • 假设您选择密码“jeff”,我也选择密码“jeff”。
      • 现在我们的两个密码哈希值相同。
      • 所以如果我看到存储的哈希码,我就会知道你的密码和我的一样,“jeff”。

      所以,我们可以在密码中添加一个“salt”字符串。

      • 这可以是任何随机的东西。
      • 假设您的帐户是“zuzu”,而我的帐户是“rjrj”。
      • 现在我们将字符串“jeffzuzu”作为您的密码,将“jeffrjrj”作为我的密码。
      • 现在我们的密码有了不同的哈希值。
      • 我们可以使用散列密码安全地存储盐值,因为即使知道盐值也无助于解码散列。

      你提到.net,在另一个论坛上有一个指向这个的指针:

      System.Security.Cryptography.MD5CryptoServiceProvider md5 = new
      System.Security.Cryptography.MD5CryptoServiceProvider();
      
      string hash =BitConverter.ToString((md5.ComputeHash(
      System.Text.ASCIIEncoding.Default.GetBytes(stringtohash) ) ));
      

      HTH!

      【讨论】:

        【解决方案3】:

        这个过程相当复杂……盐和密码不是一次,而是 1000 次。此外,base64 编码使用不同的字母表,并且从末尾删除了填充。

        最好的办法可能是找到一个可以使用的库,比如 cygwin 下的 glibc。

        既然您无论如何都针对 Apache 编写代码,请查看 crypt-md5 的 Apache's implementation

        C 中的原始算法(我认为)可以在here 找到。它与上述实现的区别仅在于不同的幻数。

        【讨论】:

          【解决方案4】:

          更新用于 sha256 和 sha512 的 crypt 算法的精确文本描述位于 http://www.akkadia.org/drepper/SHA-crypt.txt

          它包含与 MD5 算法的对比,因此它应该为您提供所需的内容。

          【讨论】:

          • 谢谢!这正是我很久以前一直在寻找的。老实说,我希望在 Stack Overflow 上有更多这样的信息。算法的描述和讨论,不考虑个别编程语言。我希望我能得到的不仅仅是支持和接受。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-01-31
          • 1970-01-01
          • 2010-09-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多