我正在使用基于Windows的Subversion,并希望在.NET中编写一个易于使用Apache密码文件的实用程序。我知道它使用了一个称为MD5Crypt的函数,但我似乎无法找到超出该算法的描述,在某些时候它使用MD5创建哈希。背后的算法MD5Crypt
有人可以描述MD5Crypt算法和密码行格式吗?
我正在使用基于Windows的Subversion,并希望在.NET中编写一个易于使用Apache密码文件的实用程序。我知道它使用了一个称为MD5Crypt的函数,但我似乎无法找到超出该算法的描述,在某些时候它使用MD5创建哈希。背后的算法MD5Crypt
有人可以描述MD5Crypt算法和密码行格式吗?
隐窝算法更新与SHA256和SHA512使用的精确的文字说明是在http://www.akkadia.org/drepper/SHA-crypt.txt
它包括MD5算法的对比,所以它应该给你你在找什么。
您可以在tcllib package.找到md5crypt的实现从sourceforge可以下载。
MD5Crypt的一个Apache兼容md5crypt的例子基本上是老式的UNIX crypt函数的替代品。它是在freebsd中引入的,并且也被其他组所采用。
的基本思路是这样的:
但是有一个问题:
所以,我们可以给密码添加一个“盐”字符串。
你提到的.NET,还有在另一个论坛上是一个指针这样的:
System.Security.Cryptography.MD5CryptoServiceProvider md5 = new
System.Security.Cryptography.MD5CryptoServiceProvider();
string hash =BitConverter.ToString((md5.ComputeHash(
System.Text.ASCIIEncoding.Default.GetBytes(stringtohash))));
HTH!
这个过程相当复杂......盐和密码不是一次就是一次,而是1000次。此外,base64编码使用不同的字母表,并且从末尾删除填充。
最好的事情可能是找到一个库来使用,就像cygwin下的glibc一样。
既然你对Apache编码,看看crypt-md5的Apache's implementation。
在C中的原始算法(我认为)可以找到here。它不同于上面的实现只是由不同的幻数。
谢谢!这正是我很久以前正在寻找的东西。我真的希望在Stack Overflow上有更多这样的信息。不考虑个别编程语言的算法描述和讨论。我希望我不仅仅赞成和接受。 – Lee 2011-02-16 01:13:11