.Net中的PHP crypt()函数?

时间:2008-12-05 14:32:08

标签: php .net asp.net security encryption

我正在重写ASP.NET MVC中的PHP网站。我想保持相同的用户群,但使用PHP crypt()函数对密码进行哈希处理。我需要.Net中的相同功能,以便我可以在登录时哈希密码并根据用户数据库中的哈希密码进行检查。

在这种情况下,

crypt使用CRYPT_MD5实现 - 哈希都以$ 1 $

开头

我尝试过Phalanger,但它没有密码函数的MD5实现。

有没有人知道.Net中的一个? CodeProject上的crypt()的C#示例使用DES,而不是MD5。

我在C#中尝试了以下代码,使用salt +密码,密码+ salt和salt的不同排列,带有和不带$ 1 $前缀和$ suffix。 None给出与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;
}

5 个答案:

答案 0 :(得分:2)

有一些用于md5散列的.NET方法,System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password, format)是最容易使用的,即使它是满口的。只需将“md5”作为格式传递。

取决于PHP如何执行此操作,可能就像在导入时将$1$从哈希开头删除一样简单。它可能更复杂。如果您可以发布一个示例密码/哈希,我会看看是否可以提供一些C#,为您生成相同的哈希密码。

答案 1 :(得分:1)

您是否看过.NET MD5 class? $ 1 $是12个字符盐的一部分。

答案 2 :(得分:1)

这些看起来很有希望,至少。

含有CRYPT_MD5盐的$1$

unix md5crypt

(DES A C# implementation of Unix crypt()

答案 3 :(得分:0)

答案 4 :(得分:0)