Добавление целочисленного октета в байтовый массив - PullRequest
0 голосов
/ 15 февраля 2011

Я пытаюсь внедрить механизм аутентификации ответа Salted Challenge ( RFC 5802 ), и у меня возникла небольшая проблема.

Hi(str, salt, i):

U1   := HMAC(str, salt + INT(1))
U2   := HMAC(str, U1)
...
Ui-1 := HMAC(str, Ui-2)
Ui   := HMAC(str, Ui-1)

Hi := U1 XOR U2 XOR ... XOR Ui

where "i" is the iteration count, "+" is the string concatenation
operator, and INT(g) is a 4-octet encoding of the integer g, most
significant octet first.

Я не уверен, как добавитьINT (1).У меня есть массив байтов для соли.Все, что мне нужно сделать, это сдвинуть бит 1 и добавить его в конец массива?

1 Ответ

1 голос
/ 15 февраля 2011

Вы не можете ничего добавить в массив.Поскольку массивы имеют фиксированный размер, вам нужно создать новый массив для результата.Используйте класс BitConverter, чтобы получить двоичное представление целого числа:

// create new array
byte[] key = new byte[salt.Length + 4];
// copy salt
Array.Copy(salt, key, salt.Length);
// create array from integer
byte[] g = BitConverter.GetBytes(1);
if (BitConverter.IsLittleEndian) {
  Array.Reverse(g);
}
// copy integer array
Array.Copy(g, 0, key, salt.Length, 4);
...