C# HMAC SHA-256-128 Результат вычисления не соответствует ожидаемому

Я пытаюсь создать подпись для нашего банка с указанным ключом, но мои результаты не совпадают с информацией, которую я получил от банка. Может ли кто-нибудь увидеть, что я делаю неправильно?

Ссылка на банк для справки (текст на шведском языке)

Примерные данные находятся внутри знаков цитирования.. :)

Данные файла: "00000000"

Ключ: "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);

person Magnus Reuter    schedule 18.09.2014    source источник
comment
Является ли ключ строкой или шестнадцатеричной строкой представление byes? (т.е. ключевой байт 1 = 0x12)   -  person Alex K.    schedule 18.09.2014
comment
Документация, которую я получил, гласит: Ключ в HMAC-SHA256-128 представлен в виде последовательности из 32 шестнадцатеричных цифр при обработке. Цифры представляют собой 4-битные группы, поэтому можно сказать, что значение ключа состоит из 128 бит.   -  person Magnus Reuter    schedule 18.09.2014


Ответы (1)


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);
person Alex K.    schedule 18.09.2014