正在VB应用程序中创建请求。
Dim unixTimeStamp As Int64
Dim currenttime = DateTime.Now
currenttime = currenttime.AddHours(1)
Dim dt = currenttime.ToUniversalTime
Dim unixEpoch = New DateTime(1970, 1, 1)
unixTimeStamp = (dt.Subtract(unixEpoch)).TotalMilliseconds
Dim nonce = unixTimeStamp
Dim message = String.Format("{0} {1} {2}", ClientId, nonce, Token)
Dim encodin = New ASCIIEncoding
Dim MessageBytes() As Byte = encodin.GetBytes(message)
Dim KeyBytes() As Byte = encodin.GetBytes(apiSecret)
Dim Signature As String
Using myHMACSHA256 As New HMACSHA256(KeyBytes)
Dim hashmessage() As Byte
hashmessage = myHMACSHA256.ComputeHash(MessageBytes)
Signature = Convert.ToBase64String(hashmessage)
End Using
Dim strHeader = String.Format("{0} {1} {2} {3}", APIKey, Token, nonce, Signature)
Return strHeader
在C#应用程序中将值解码,然后重新创建哈希以进行比较。
string msg = string.Format("{0} {1} {2}", clientId, nonce, token);
string result;
var encoding = new ASCIIEncoding();
byte[] keyByte = encoding.GetBytes(privateKey);
byte[] messageBytes = encoding.GetBytes(msg);
using (var hmacsha256 = new HMACSHA256(keyByte))
{
byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
result = Convert.ToBase64String(hashmessage);
}
return result == clientSignature;
在此示例中,MessageBytes
(vb)和messageBytes
(c#)是相同的字节数组。两者的keyBytes
相同。
但是,当调用hmacsha256.ComputeHash
时,我收到了不同的结果。两个字节数组的长度相同,但是内容完全不同。
我的理解是,只能为不同的输入提供不同的结果?有什么明显的我想念的地方吗?
[此问题是由于所涉及的用户是特例,正在与另一位开发人员合作以使他们的插件正常工作。已为他们提供了新生成的API机密,但未能中继此信息。上面的代码按预期工作...