Как реализовать алгоритм HMAC-SHA1 в QT

Я пытаюсь реализовать алгоритм HMAC-SHA1 в своем C++ / спокойное приложение. У меня есть метод для доступного алгоритма Sha1, я просто должен понять часть HMAC его.

Этот псевдокод из Википедии:

 1 function hmac (key, message)
 2     if (length(key) > blocksize) then
 3         // keys longer than blocksize are shortened
 4         key = hash(key)
 5     end if
 6     if (length(key) < blocksize) then
 7         // keys shorter than blocksize are zero-padded
 8         key = key ∥ zeroes(blocksize - length(key))
 9     end if
10
11     // Where blocksize is that of the underlying hash function
12     o_key_pad = [0x5c * blocksize] ⊕ key
13     i_key_pad = [0x36 * blocksize] ⊕ key // Where ⊕ is exclusive or (XOR)
14     // Where ∥ is concatenation
15     return hash(o_key_pad ∥ hash(i_key_pad ∥ message))
16 end function

Каков blocksize? Что обнулять-функция делает на строке 8? Как Вы выражаете строки 12-13 в C++?

6
задан Ilmari Karonen 3 November 2013 в 15:12
поделиться

3 ответа

1. Что такое размер блока?

Обычно хеш-алгоритм обрабатывает данные, разрезая их на фрагменты данных фиксированного размера (также известные как «блоки»). Для SHA1 обычный размер блока составляет 64 байта.

2. Что делает функция нулей в строке 8?

Она (как сказано в комментарии) добавляет «нули» в конец ключа, чтобы его длина соответствовала размеру «блока».

3. Как вы выражаете строки 12-13 в C ++?

Думаю, вы ищете оператор XOR: ^ .

Пример:

o_key_pad = (0x5c * blocksize) ^ key; // Actually, it should be 0x5c5c5c... repeated enough so that it matches key size.

Небольшое примечание : это не имеет ничего общего с Qt , и вы, вероятно, захотите сделать это в "исходном" C ++ , поэтому что вы можете в конечном итоге повторно использовать его в проекте, отличном от Qt . Qt великолепен imho, но вам явно не требуется, чтобы он реализовал это.

6
ответ дан 8 December 2019 в 17:18
поделиться

Взгляните на библиотеку QCA . Он уже предоставляет реализации всех основных криптографических алгоритмов.

1
ответ дан 8 December 2019 в 17:18
поделиться

Вам также следует взглянуть на QCryptographicHash , поскольку он может помочь вам с sha1-частью вашей проблемы.

1
ответ дан 8 December 2019 в 17:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: