MD5Crypt 背后的算法

发布于 2024-07-04 11:12:02 字数 175 浏览 14 评论 0 原文

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

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

I'm working with Subversion based on Windows and would like to write an easy utility in .NET for working with the Apache password file. I understand that it uses a function referred to as MD5Crypt, but I can't seem to find a description of the algorithm beyond that at some point it uses MD5 to create a hash.

Can someone describe the MD5Crypt algorithm and password line format?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

计㈡愣 2024-07-11 11:12:03

这个过程相当复杂......盐和密码一起哈希不是一次,而是 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.

韶华倾负 2024-07-11 11:12:03

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

牵强ㄟ 2024-07-11 11:12:03

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!

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:

  • a hash is a good way to store a password
    • you take the user's entered password and hash it
    • compare it to the stored hash
    • if the hash is the same, the passwords match

But there's a problem:

  • Suppose you pick the password "jeff" and I also pick the password "jeff".
  • Now both of our password hashes are the same.
  • So if I see the stored hash codes, I will know your password is the same as mine, "jeff".

So, we can add a "salt" string to the password.

  • This can be any random thing.
  • Suppose for your account it is "zuzu" and for my account it is "rjrj".
  • Now we hash the string "jeffzuzu" for your password, and "jeffrjrj" for my password.
  • Now we have different hash values for our password.
  • We can safely store the salt value with the hashed password, since even knowing the salt value won't help to decode the hash.

You mention .net, there's a pointer over in another forum to this:

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

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

HTH!

超可爱的懒熊 2024-07-11 11:12:02

更新后用于 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文