根据id创建一个哈希并对其进行签名

本文关键字:哈希 一个 创建 id 根据 | 更新日期: 2023-09-27 18:29:10

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

此超链接有一个参数。

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

参数是一个简单的整数。

  • 我想从整数创建一个散列
  • 我想在哈希表上签名

当前应该为该任务使用哪些.NET类?

根据id创建一个哈希并对其进行签名

实现这一点的最简单方法是使用HMAC("密钥散列消息身份验证代码")。

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的结果传递给URL中的用户。当用户单击链接时,您将验证数据是否未被修改。

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

您可以在这里看到如何计算哈希。

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

您可以在计算上面计算的HASH的HASH加上应用程序的常数(例如,日期和小时)的输入上"签名"