3

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

有人可以描述 MD5Crypt 算法和密码行格式吗?

4

4 回答 4

4

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

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

于 2011-02-15T21:09:46.357 回答
3

您可以在tcllib 包中找到 md5crypt 的实现。可从sourceforge下载。

您还可以在 CAS Generic Handler 的源代码中找到与 apache 兼容的 md5crypt 示例

于 2008-08-22T21:20:37.187 回答
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) ) ));

于 2008-08-22T21:33:48.920 回答
2

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

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

由于无论如何您都针对 Apache 编写代码,因此请查看Apache 的crypt-md5 实现。

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

于 2008-10-01T00:19:50.903 回答