根据id创建一个哈希并对其进行签名
本文关键字:哈希 一个 创建 id 根据 | 更新日期: 2023-09-27 18:29:10
我们的用户收到带有准备好的超链接的电子邮件。
此超链接有一个参数。
当用户点击超链接时,我需要确保用户没有篡改参数。
参数是一个简单的整数。
- 我想从整数创建一个散列
- 我想在哈希表上签名
当前应该为该任务使用哪些.NET类?
实现这一点的最简单方法是使用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
保密,并将data
和CreateHMAC
的结果传递给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加上应用程序的常数(例如,日期和小时)的输入上"签名"