我正在尝试使用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
从散列字节中创建一个字符串。但我不知道正确的设置是什么。
答案 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看起来不一样。