c# - 在 C# 中生成 HMAC-SHA1

标签 c# cryptography

我正在尝试使用 C# 来使用 REST API。

API 创建者提供了以下用于 hmac 创建的伪代码。

var key1 = sha1(body);
var key2 = key1 . SECRET_KEY;
var key3 = sha1(key2);
var signature = base64_encode(key3);

上面的伪代码中,body是html请求正文字符串,SECRET_KEY 是REST API提供商提供的 key 。

据我所知,我需要使用 System.Security.Cryptography.HMACSHA1 类 来实现这一点。

但我无法在 C# 中完全实现上述逻辑。

有什么建议吗?

最佳答案

将上述代码直接映射到 C# 类似于:

static string ComputeSignature(byte[] body, byte[] secret) {
    using (var sha1 = SHA1.Create())
    {
        var key1 = sha1.ComputeHash(body);
        var key2 = key1.Concat(secret).ToArray();
        var key3 = sha1.ComputeHash(key2);
        return Convert.ToBase64String(key3);
    }
}

如果您的请求正文为字符串,请使用正确的编码将其转换为字节数组,例如:

var body = Encoding.UTF8.GetBytes(bodyAsString);

如果您的 secret 是字符串 - 这取决于 api 开发人员希望如何将其转换为字节数组。它很可能已经是十六进制或 base64 编码的字符串。

关于c# - 在 C# 中生成 HMAC-SHA1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36931840/

相关文章:

c# - 如何处理 Access INSERT 语句和 .NET DataGridView 控件中的语法错误?

android - Android 上的公钥加密

C++ 麦克风输入作为随机种子

java - RSA 逐 block 加密对大于 1kb 的文件产生空白输出

java - 尝试理解RSA加密代码示例

c# - 具有 AES 和 rsaEncryption(PKCS#1 v1.5 填充而不是 v2(OAEP)填充)的 EnvelopedCMS 可能吗?

c# - 个人等待与 Task.WhenAll

c# - 在 Nest Elastic Search 中按降序获取 Distinct Term

c# - XmlSerializer。跳过 xml 未知节点

c# - WPF 列表框绑定(bind)