Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net MD5Crypt背后的算法_.net_Svn_Apache_Md5_Crypt - Fatal编程技术网

.net MD5Crypt背后的算法

.net MD5Crypt背后的算法,.net,svn,apache,md5,crypt,.net,Svn,Apache,Md5,Crypt,我正在使用基于Windows的Subversion,并希望在.NET中编写一个简单实用程序,用于处理Apache密码文件。我知道它使用了一个称为MD5Crypt的函数,但我似乎找不到算法的描述,除了在某个点上它使用MD5创建散列 有人能描述一下MD5Crypt算法和密码行格式吗?您可以在下载中找到MD5Crypt的实现,可从以下站点获得 您还可以在中找到与apache兼容的md5crypt示例md5crypt基本上是老式unix crypt函数的替代品。它是在freebsd中引入的,也被其他团体

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


有人能描述一下MD5Crypt算法和密码行格式吗?

您可以在下载中找到MD5Crypt的实现,可从以下站点获得


您还可以在

中找到与apache兼容的md5crypt示例md5crypt基本上是老式unix crypt函数的替代品。它是在freebsd中引入的,也被其他团体采用

其基本思想是:

  • 散列是存储密码的好方法
    • 您获取用户输入的密码并对其进行哈希运算
    • 将其与存储的哈希进行比较
    • 如果哈希相同,则密码匹配
但有一个问题:

  • 假设您选择了密码“jeff”,我也选择了密码“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) ) ));

这个过程相当复杂。。。salt和密码不是一次散列在一起,而是1000次散列在一起。此外,base64编码使用不同的字母表,并且从末尾删除了填充

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

既然您是针对Apache编写代码的,那么请看一下crypt-md5


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

为使用sha256和sha512而更新的加密算法的精确文本描述位于


它包含了与MD5算法的对比,因此它应该能满足您的需求。

谢谢!这正是我很久以前一直在寻找的。我真希望有更多关于堆栈溢出的信息。对算法的描述和讨论,不考虑单个编程语言。我希望我能得到的不仅仅是一张赞成票和一张接受票。