在 C# 中使用用户密钥通过 sha1 算法进行散列
Hashing by sha1 algorithm with user's secret key in C#
我需要根据 sha1 算法对字符串进行哈希处理,使用用户的密钥,例如:hash = hash (string, secret_key).
我使用这个代码:
byte[] data = sha1.ComputeHash(Encoding.UTF8.GetBytes(input));
但是我找不到如何在这个算法中使用密钥。
哈希是对数据应用哈希函数的结果。它将任意数据映射到固定大小的值。这不需要任何秘密。
使用散列和密钥的加密过程正在对数据进行签名。您可能希望使用私钥基于 public/private 密钥加密创建数据哈希和 MAC(消息身份验证代码)。
一个散列只告诉你数据是否被修改。
A MAC 使用任何类型的秘密,因此它也可以防止操纵。通常,MAC仅在发送方和接收方相互认识时才有效。
你可以这样做:
public string SignData(string message, string secret)
{
var encoding = new System.Text.UTF8Encoding();
var keyBytes = encoding.GetBytes(secret);
var messageBytes = encoding.GetBytes(message);
using (var hmacsha1 = new HMACSHA1(keyBytes))
{
var hashMessage = hmacsha1.ComputeHash(messageBytes);
return Convert.ToBase64String(hashMessage);
}
}
我需要根据 sha1 算法对字符串进行哈希处理,使用用户的密钥,例如:hash = hash (string, secret_key).
我使用这个代码:
byte[] data = sha1.ComputeHash(Encoding.UTF8.GetBytes(input));
但是我找不到如何在这个算法中使用密钥。
哈希是对数据应用哈希函数的结果。它将任意数据映射到固定大小的值。这不需要任何秘密。
使用散列和密钥的加密过程正在对数据进行签名。您可能希望使用私钥基于 public/private 密钥加密创建数据哈希和 MAC(消息身份验证代码)。
一个散列只告诉你数据是否被修改。
A MAC 使用任何类型的秘密,因此它也可以防止操纵。通常,MAC仅在发送方和接收方相互认识时才有效。
你可以这样做:
public string SignData(string message, string secret)
{
var encoding = new System.Text.UTF8Encoding();
var keyBytes = encoding.GetBytes(secret);
var messageBytes = encoding.GetBytes(message);
using (var hmacsha1 = new HMACSHA1(keyBytes))
{
var hashMessage = hmacsha1.ComputeHash(messageBytes);
return Convert.ToBase64String(hashMessage);
}
}