首页 > 解决方案 > 在 C# 中使用用户的密钥通过 sha1 算法进行散列

问题描述

我需要根据 sha1 算法使用用户的密钥对字符串进行哈希处理,例如:hash = hash (string, secret_key).

我使用这段代码:

byte[] data = sha1.ComputeHash(Encoding.UTF8.GetBytes(input));

但我找不到如何在这个算法中使用密钥。

标签: c#sha1

解决方案


散列是对数据应用散列函数的结果。它将任意数据映射到固定大小的值。这不需要任何秘密。

使用散列和密钥的加密过程是签名数据。您可能希望使用私钥基于公钥/私钥加密创建数据哈希和 MAC(消息验证码)。

哈希仅告诉您数据是否被修改。

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

推荐阅读