2016-11-15 11 views
0

поэтому я в настоящее время изучаю Python и изучаю методы шифрования на этом языке. Там я нашел функцию pbkdf2_hmac (hash_name, password, salt, iterations, dklen = None) из библиотеки hashlib.Итерация в основанной на пароле функции деривации ключа 2

Однако параметр «итерации» не работает, как я ожидаю. Как показывает следующий простой код, когда я пытаюсь дважды вызывать функцию с одной итерацией, я получаю другой ответ, тогда когда я вызываю его один раз с двумя итерациями. Поскольку функции хеширования детерминированы, оба метода должны давать один и тот же результат.

import hashlib 
a=hashlib.pbkdf2_hmac("sha256",b"hallo",b"salt",1) 
b=hashlib.pbkdf2_hmac("sha256",a,b"salt",1) 
c=hashlib.pbkdf2_hmac("sha256",b"hallo",b"salt",2) 
print(b) 
print(c) 

Может кто-нибудь сказать мне, что пошло не так?

ответ

1

2-е итерации PBKDF2 - это не только PBKDF2 (первая итерация).

упрощенное объяснение:

  • 1 итерация: HMAC(password, salt || 00000001)
  • 2 итерации: HMAC(password, HMAC(password, salt || 00000001))
  • PBKDF2 (PBKDF2): HMAC(HMAC(password, salt || 00000001), salt || 00000001)

Обратите внимание, что "2 итераций" и " PBKDF2 (PBKDF2) "используют разные ключи HMAC для второго вычисления, поэтому они дают разные результаты.

Насколько «функции хеширования детерминированы»: они есть. Если вы вызываете их с одинаковыми входами, они дают одинаковые выходы. Вы дали им разные материалы из-за непонимания того, как работает основной алгоритм.