题
我正在使用基于 Windows 的 Subversion,并且想在 .NET 中编写一个简单的实用程序来处理 Apache 密码文件。我知道它使用了一个称为 MD5Crypt 的函数,但除了在某些时候它使用 MD5 创建哈希之外,我似乎找不到该算法的描述。
有人可以描述 MD5Crypt 算法和密码行格式吗?
解决方案
更新用于 sha256 和 sha512 的加密算法的精确文本描述位于 http://www.akkadia.org/drepper/SHA-crypt.txt
它包含与 MD5 算法的对比,因此它应该可以为您提供所需的内容。
其他提示
您可以在中找到 md5crypt 的实现 tcllib 包。 可从以下位置下载 来源锻造.
您还可以在中找到 apache 兼容 md5crypt 的示例 CAS 通用处理程序的源代码
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) ) ));
哈!
不隶属于 StackOverflow