在C#中生成Unix风格的MD5密码哈希

时间:2011-11-30 18:44:10

标签: c# md5

我正在尝试使用MD5生成Unix样式的密码哈希。我不知道我需要它看起来像$1$<salt>$<hash>,但<hash>部分看起来并不相同,无论我做什么。以下是我生成哈希的方法:

            MD5 md5 = System.Security.Cryptography.MD5.Create();
            byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(pass);
            byte[] hash = md5.ComputeHash(inputBytes);

            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < hash.Length; i++)
            {
                sb.Append((char) hash[i]);
            }

            String calchash = sb.ToString();

我很确定现在我正在使用StringBuilder从散列字节中创建一个字符串。但我不知道正确的设置是什么。

3 个答案:

答案 0 :(得分:2)

Unix md5 crypt不使用plain md5。这将是不安全的,因为普通的md5很快,密码哈希应该很慢。

我找到了相关的代码项目文章:http://www.codeproject.com/KB/recipes/Unix_md5crypt.aspx

答案 1 :(得分:0)

这是关于格式化的。 Unix密码哈希是十六进制格式,而你用二进制文件写下来。用以下代码替换循环体:

sb.Append(hash[i].ToString("x").PadLeft(2,'0'));

答案 2 :(得分:0)

我认为你应该使用hash [i] .ToString(“X”)而不是转换为char。因为哈希字节可以在0到255之间的任何范围内,这与md5 hash看起来不一样。