从id创建哈希并对其进行签名

时间:2016-01-06 22:13:52

标签: c# security .net-4.5.2

我们的用户使用准备好的超链接接收电子邮件。

此超链接有一个参数。

当用户点击超链接时,我需要确保用户没有篡改参数。

参数是一个简单的整数。

  • 我想从整数中创建一个哈希。
  • 我想签名哈希。

我应该用于此任务的当前.NET类是什么?

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用HMAC(“keyed-hash message authentication code”)。

public static string CreateHMAC(int data, byte[] key)
{
    using(var hmac = new HMACSHA1(key))
    {
        var dataArray = BitConverter.GetBytes(data);
        var resultArray = hmac.ComputeHash(dataArray);
        return Convert.ToBase64String(resultArray);
    }
}

您在服务器上保密key,并将dataCreateHMAC的结果传递给网址中的用户。当用户单击该链接时,您将验证数据未被修改。

public static bool VerifyHMAC(int data, byte[] key, string verification)
{
    using(var hmac = new HMACSHA1(key))
    {
        var dataArray = BitConverter.GetBytes(data);
        var computedHash = hmac.ComputeHash(dataArray);
        var verificationHash = Convert.FromBase64String(verification);

        for (int i = 0; i < verificationHash.Length; i++)
        {
            if (computedHash[i] != verificationHash[i])
            {
                return false;
            }
        }
        return true;
    }
}

答案 1 :(得分:0)

您可以看到here如何计算哈希值。

由于HASH函数只接受ARRAYS,我建议你创建一个单项的数组,并带有你的整数。

您可以“签署”计算HASH的计算HASH高于PLUS的输入应用的常数(例如日期和小时)