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

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

===============>>#1 票数:4 已采纳

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

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

===============>>#2 票数:3

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

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

===============>>#3 票数:2

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

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

既然您无论如何都要对Apache进行编码,请查看Apache的 crypt-md5实现。

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

===============>>#4 票数:2

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

基本的想法是这样的:

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

但是有一个问题:

  • 假设你选择密码“jeff”,我也选择密码“jeff”。
  • 现在我们的两个密码哈希都是一样的。
  • 因此,如果我看到存储的哈希码,我将知道您的密码与我的密码相同,“杰夫”。

因此,我们可以在密码中添加“salt”字符串。

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

你提到.net,在另一个论坛中有一个指针:

System.Security.Cryptography.MD5CryptoServiceProvider md5 = new
System.Security.Cryptography.MD5CryptoServiceProvider();

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

HTH!

  ask by Lee translate from so

未解决问题?本站智能推荐: