.net中的crypt()函数?
我在ASP.NET MVC中重写了一个PHP网站。 我想保持相同的用户群,但密码使用PHP crypt()函数进行散列处理。 我需要.Net中的相同功能,以便我可以在登录时散列密码,并根据用户数据库中的散列密码进行检查。
在这种情况下,crypt使用CRYPT_MD5实现 - 哈希都以$ 1 $开头
我试过Phalanger,但它没有crypt函数的MD5实现。
有没有人知道.Net中的一个? CodeProject上crypt()的C#示例使用DES,而不是MD5。
我已经在C#中尝试了以下代码,使用salt +密码,密码+ 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哈希的.NET方法,即使它很满意, System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password, format)
也是最容易使用的。 只需传递“md5”作为格式即可。
取决于PHP如何做到这一点,它可能就像在你导入哈希时从$1$
开始砍掉$1$
一样简单。 它可能更复杂。 如果你可以发布一个示例密码/哈希,我会看看我是否可以想出一些C#,它会为你生成相同的哈希密码。
你有没有看过.NET MD5课程? $ 1 $是12字符盐的一部分。
至少这些看起来很有希望。
对于带$1$
盐的CRYPT_MD5
使用unix md5crypt。
(用于DES的Unix crypt的AC#实现)
链接地址: http://www.djcxy.com/p/42133.html