C# 使用C生成带有密钥的HMAC SHA256的标准代码是什么#
我想知道是否有使用密钥生成SHA256哈希的标准代码。我遇到过几种类型的代码,但是,它们不会生成相同的输出 代码位于 这是我找到的另一个C# 使用C生成带有密钥的HMAC SHA256的标准代码是什么#,c#,hash,sha,C#,Hash,Sha,我想知道是否有使用密钥生成SHA256哈希的标准代码。我遇到过几种类型的代码,但是,它们不会生成相同的输出 代码位于 这是我找到的另一个 private static string ComputeHash(string apiKey, string message) { var key = Encoding.UTF8.GetBytes(apiKey); string hashString; using (var hmac = new HMACSHA256(key))
private static string ComputeHash(string apiKey, string message)
{
var key = Encoding.UTF8.GetBytes(apiKey);
string hashString;
using (var hmac = new HMACSHA256(key))
{
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(message));
hashString = Convert.ToBase64String(hash);
}
return hashString;
}
这两种方法生成的代码与
我将对我们的一个外部API使用
SHA256
,消费者将在其中散列数据并将其发送给我们。因此,我们只想确保使用标准方法,以便他们向我们发送正确的散列。另外,我想知道是否有任何著名的裸体。我也试着用Bouncy Castle找到一个解决方案,但是,我找不到一个使用密钥散列的解决方案。区别在于字符编码(在您的示例中是ASCII与UTF-8)。请注意,散列算法采用字节数组,您需要事先将字符串转换为该字节数组
您的问题“标准代码是什么”可能没有答案,我想说,如果您希望输入仅包含ASCII字符空间中的内容,那么就使用它,如果不使用UTF-8。无论哪种方式-将其传达给您的用户
如果你想从可用性的角度来看待它,让它成为用户的最佳选择,那么两者都可以。对内容进行双向散列并检查用户传入的散列,但这完全取决于您对时钟周期、安全性和可用性的评估(您可以有两个)它们几乎是等效的 区别在于字符串的编码是如何建立的 代码的第一部分采用ASCII,而第二部分采用UTF-8。该字符串可能使用了其他编码,但这些编码都不是 但不管怎样,我们的想法是要了解这次行动的目标是什么。这方面真正相关的事情是:
private static string ComputeHash(string apiKey, string message)
{
var key = Encoding.UTF8.GetBytes(apiKey);
string hashString;
using (var hmac = new HMACSHA256(key))
{
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(message));
hashString = Convert.ToBase64String(hash);
}
return hashString;
}