gpt4 book ai didi

C# HMAC SHA-256-128 计算结果不符合预期

转载 作者:太空狗 更新时间:2023-10-30 01:18:45 28 4
gpt4 key购买 nike

我正在尝试使用指定 key 为我们的银行创建签名,但我的结果与我从银行获得的信息不同。谁能看出我做错了什么?

链接到 bank 以供引用(瑞典语文本)

示例数据在引文标记内.. :)

文件数据:“00000000”

key :“1234567890ABCDEF1234567890ABCDEF”

预期结果:“FF365893D899291C3BF505FB3175E880”

我的结果:“05CD81829E26F44089FD91A9CFBC75DB”

我的代码:

        // Using ASCII teckentabell
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();

// Using HMAC-SHA256
byte[] keyByte = encoding.GetBytes("1234567890ABCDEF1234567890ABCDEF");
HMACSHA256 hmacsha256 = new HMACSHA256(keyByte);

byte[] messageBytes = encoding.GetBytes("00000000");
byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);

byte[] truncArray = new byte[16];
Array.Copy(hashmessage, truncArray, truncArray.Length);

// conversion of byte to string
string sigill = ByteArrayToString(truncArray);

// show sigill
MessageBox.Show("Sigill:\n" + sigill, "Sigill", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

最佳答案

Key 是表示二进制 key 的十六进制数字字符串,而不是单个字符的字符串。

为了获得正确的输出,您需要将其转换为字节数组:

var key = "1234567890ABCDEF1234567890ABCDEF";
byte[] keyByte = new byte[key.Length / 2];

for (int i = 0; i < key.Length; i += 2)
{
keyByte[i / 2] = Convert.ToByte(key.Substring(i, 2), 16);
}

HMACSHA256 hmacsha256 = new HMACSHA256(keyByte);

byte[] messageBytes = encoding.GetBytes("00000000");
byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);

byte[] truncArray = new byte[16];
Array.Copy(hashmessage, truncArray, truncArray.Length);

关于C# HMAC SHA-256-128 计算结果不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25911334/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com