HMAC SHA-256从JavaScript或PHP返回不同的值

时间:2013-09-16 14:14:07

标签: c# cryptography hmac

我使用函数来获取字符串值的HMAC SHA-256哈希值。但是当我在JavaScript和PHP中散列值时,两种语言都计算出相同的哈希值,它与C#结果不同。

我搜索了谷歌并尝试了一切,但它没有给我正确的结果。也许我只是错过了什么。

    public static string ToHMAC(this string input, string key)
    {
        if (string.IsNullOrEmpty(input))
            throw new ArgumentNullException("input");

        var hasher = new HMACSHA256(Encoding.UTF8.GetBytes(key));
        var data = hasher.ComputeHash(Encoding.UTF8.GetBytes(input));

        return BitConverter.ToString(data).Replace("-", String.Empty).ToLower();
    }

我尝试在控制台应用程序中进行一些测试。

class Program
{
    static void Main(string[] args)
    {
        const string input = "testpw1";
        const string token = "9e76fa355b5e4bed910f621f6a5fb971";
        var phash = input.ToSHA();
        Console.WriteLine("Hashed password: " + phash);
        Console.WriteLine("Signed password: " + phash.ToHMAC(token));
        Console.ReadKey();
    }
}

static class Extensions
{
    public static string ToSHA(this string input)
    {
        if (string.IsNullOrEmpty(input))
            throw new ArgumentNullException("input");

        var hasher = new SHA256Managed();
        var data = hasher.ComputeHash(Encoding.UTF8.GetBytes(input));

        return BitConverter.ToString(data).Replace("-", String.Empty).ToLower();
    }

    public static string ToHMAC(this string input, string key)
    {
        if (string.IsNullOrEmpty(input))
            throw new ArgumentNullException("input");

        var hasher = new HMACSHA256(Encoding.UTF8.GetBytes(key));
        var data = hasher.ComputeHash(Encoding.UTF8.GetBytes(input));
        var retval = BitConverter.ToString(data).Replace("-", String.Empty).ToLower();

        return retval;
    }
}

这正是我在MVC应用程序中的做法。但不知何故,这些值与PHP和JavaScript哈希值相同。我真的不知道自己做错了什么。

0 个答案:

没有答案