从 id 创建哈希并签名

Create a hash from an id and sign it

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

这个超链接有一个参数。

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

参数是一个简单的整数。

我应该使用哪些当前的 .NET 类 来完成这项任务?

你可以看到here如何计算散列。

由于 HASH 函数只接受数组,我建议您创建一个包含单个项目的数组,其中包含您的整数。

您可以"sign"输入计算上面计算的哈希值的哈希值加上您的应用程序的常量(或日期和时间,例如)

最简单的方法是使用 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,并在 URL 中将 dataCreateHMAC 的结果传递给用户。当用户单击 link 时,您验证数据未被修改。

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;
    }
}