在C#和VB中使用HMACSHA256 ComputeHash的不同结果

问题描述 投票:0回答:1

正在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时,我收到了不同的结果。两个字节数组的长度相同,但是内容完全不同。

我的理解是,只能为不同的输入提供不同的结果?有什么明显的我想念的地方吗?

c# vb.net hash encoding hmacsha1
1个回答
0
投票

[此问题是由于所涉及的用户是特例,正在与另一位开发人员合作以使他们的插件正常工作。已为他们提供了新生成的API机密,但未能中继此信息。上面的代码按预期工作...

© www.soinside.com 2019 - 2024. All rights reserved.