Что происходит в строке кода? - PullRequest
2 голосов
/ 19 ноября 2009

Что происходит в этой строке кода?

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");

Я специально не понимаю getInstance ("PBKDF2WithHmacSHA1") часть

Ответы [ 3 ]

6 голосов
/ 19 ноября 2009

Эта необычно выглядящая строка определяет используемый алгоритм секретного ключа. Это:

PBKDF2WithHmacSHA1
PBKDF2 With Hmac SHA1
  • функция PBKDF2 (из PKCS # 5 версия 2.0)
  • , который будет использовать SHA-1 HMAC для своего генератора псевдослучайных чисел

Ссылки
Мы находим похожие имена алгоритмов в Руководстве по расширению Java Crypto. При добавлении A , каким-то образом PKCS5 версии 2, возможно, тогда не было доступно / не документировано (или действительно, как предполагает brianegge, возможно, это ограничение экспорта, распространенная проблема с криптографическими элементами).
Имя алгоритма действительно отображается в RFC3962 (AES для Kerberos), который может быть не тем приложением, которое вы имеете в виду, но определенным, все же)

1 голос
/ 19 ноября 2009

«PBKDF2» - это функция, определенная в PKCS # 5 , используемая для получения материала ключа из пароля.

PBKDF2 требует псевдослучайной функции, и в этом случае используется код аутентификации сообщения на основе хэша SHA-1 - "HmacSHA1".

Итак, эта линия создает фабрику. Фабрика может создавать объекты SecretKey, которые можно использовать для ввода экземпляра Cipher для алгоритма симметричного шифрования или алгоритма Mac. Или его можно использовать для создания «прозрачной» спецификации существующего SecretKey.

Одна важная вещь, которую следует отметить в PBKDF2, это то, что он не создает секретных ключей для какого-либо конкретного алгоритма. Это детерминированный способ генерации «материала» ключа из начального числа (пароля) таким образом, что начальное значение невозможно восстановить из сгенерированного ключа. После создания необходимого количества байтов они обычно заключаются в SecretKeySpec с правильным именем алгоритма.

Другие стандартные имена для заводов секретных ключей можно найти в Java Crypto Architecture Стандартные имена Документация.

1 голос
/ 19 ноября 2009

Разные дистрибутивы Java содержат разные крипто. Это связано с экспортными ограничениями и патентами. Строка кода запрашивает фабрику, которая может создать ключ такого типа.

В частности, PBKDF2WithHmacSHA1 создает секретные ключи, используя Функция получения ключа на основе пароля , найденная в PKCS5 v2.0 .

...