如何在C#中生成HMAC-SHA1?
我正在尝试使用C#使用REST API。API创建者提供了PHP,Ruby和Java的示例库。我挂在它的一部分上,我需要生成一个HMAC
。
以下是在他们提供的示例库中完成此操作的方式。
菲律宾比索
hash_hmac('sha1', $signatureString, $secretKey, false);
红宝石
digest = OpenSSL::Digest::Digest.new('sha1')
return OpenSSL::HMAC.hexdigest(digest, secretKey, signatureString)
爪哇岛
SecretKeySpec signingKey = new SecretKeySpec(secretKey.getBytes(), HMAC_SHA1_ALGORITHM);
Mac mac = null;
mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
mac.init(signingKey);
byte[] bytes = mac.doFinal(signatureString.getBytes());
String form = "";
for (int i = 0; i < bytes.length; i++)
{
String str = Integer.toHexString(((int)bytes[i]) & 0xff);
if (str.length() == 1)
{
str = "0" + str;
}
form = form + str;
}
return form;
这是我在C#中的尝试。它不起作用。更新:下面的 C# 示例工作正常。我发现真正的问题是由于我的换行符中的一些跨平台差异。signatureString
var enc = Encoding.ASCII;
HMACSHA1 hmac = new HMACSHA1(enc.GetBytes(secretKey));
hmac.Initialize();
byte[] buffer = enc.GetBytes(signatureString);
return BitConverter.ToString(hmac.ComputeHash(buffer)).Replace("-", "").ToLower();