MD5Crypt 背后的算法
我正在使用基于 Windows 的 Subversion,并且想在 .NET 中编写一个简单的实用程序来处理 Apache 密码文件。 我知道它使用了一个称为 MD5Crypt 的函数,但除了在某些时候它使用 MD5 创建哈希之外,我似乎找不到该算法的描述。
有人可以描述 MD5Crypt 算法和密码行格式吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这个过程相当复杂......盐和密码一起哈希不是一次,而是 1000 次。 此外,base64 编码使用不同的字母表,并且从末尾删除填充。
最好的办法可能是找到一个可以使用的库,比如 cygwin 下的 glibc。
既然您无论如何都针对 Apache 进行编码,请查看 Apache 的 crypt-md5 实现。
C 中的原始算法(我认为)可以找到 此处。 它与上面的实现的区别仅在于幻数不同。
The process is rather involved... the salt and the password are hashed together not once, but 1000 times. Also, the base64 encoding uses a different alphabet, and the padding is removed from the end.
The best thing would probably be to find a library to use, like glibc under cygwin.
Since you code against Apache anyway, have a look at Apache's implementation of crypt-md5.
The original algorithm (I think) in C can be found here. It differs from the above implementation only by the different magic number.
您可以在 tcllib 包中找到 md5crypt 的实现。 可从 sourceforge。
您还可以在 CAS 通用处理程序的源代码
You can find an implementation of md5crypt in the tcllib package. Download is available from sourceforge.
You can also find an example of an apache-compatible md5crypt in the source code for the CAS Generic Handler
MD5Crypt 基本上是老式 unix crypt 函数的替代品。 它是在 freebsd 中引入的,并且也被其他团体采用。
基本思想是这样的:
但是有一个问题:
因此,我们可以在密码中添加一个“salt”字符串。
您提到.net,另一个论坛上有一个指向此的指针:
HTH!
MD5Crypt is basically a replacement for the old-fashioned unix crypt function. It was introduced in freebsd, and has been adopted by other groups as well.
The basic idea is this:
But there's a problem:
So, we can add a "salt" string to the password.
You mention .net, there's a pointer over in another forum to this:
HTH!
更新后用于 sha256 和 sha512 的 crypt 算法的精确文本描述位于 http:// www.akkadia.org/drepper/SHA-crypt.txt
它包含与 MD5 算法的对比,因此它应该可以为您提供所需的内容。
A precise textual description of the crypt algorithm updated for use with sha256 and sha512 is at http://www.akkadia.org/drepper/SHA-crypt.txt
It includes contrasts with the MD5 algorithm, so it should give you what you're looking for.