【发布时间】:2010-09-25 12:46:22
【问题描述】:
我正在用 ASP.NET MVC 重写一个 PHP 网站。我想保持相同的用户群,但使用 PHP crypt() 函数对密码进行哈希处理。我需要在 .Net 中使用相同的功能,以便我可以在登录时散列密码,并根据用户数据库中的散列密码检查它。
在这种情况下,crypt 使用 CRYPT_MD5 实现 - 哈希都以 $1$ 开头
我试过 Phalanger,但它没有 crypt 函数的 MD5 实现。
有人知道.Net 中的一个吗? CodeProject 上 crypt() 的 C# 示例使用的是 DES,而不是 MD5。
我在 C# 中尝试了以下代码,使用不同的 salt+password、password+salt 和 salt 排列,有和没有 $1$ 前缀和 $ 后缀。没有给出与 PHP 相同的结果:
static void Main(string[] args)
{
const string salt = "somesalt";
const string password = "fubar";
const string plaintextString = password + salt;
byte[] plaintext = GetBytes(plaintextString);
var md5 = MD5.Create("MD5");
byte[] hash = md5.ComputeHash(plaintext);
string s = System.Convert.ToBase64String(hash);
Console.WriteLine("Hash of " + password + " is " + s);
Console.ReadKey();
}
private static byte[] GetBytes(string s)
{
var result = new byte[s.Length];
for (int i = 0; i < s.Length; i++)
result[i] = (byte)s[i];
return result;
}
【问题讨论】:
-
MD5 不被视为安全哈希,您可能希望将系统升级到 SHA-256。
-
顺便说一句,
Console.WriteLine("Hash of {0} is {1}", password, s); -
Abatishchev,这是检查我是否可以为给定的输入字符串生成与 PHP 相同的哈希值的快速峰值。您的评论完全偏离主题,没有什么帮助。
标签: php .net asp.net security encryption