генератор случайных секретных ключей с использованием фиксированной начальной java

#java #key-generator

#ява #генератор ключей #java

Вопрос:

Я хочу сгенерировать секретный ключ (128 бит) на основе некоторого предопределенного начального значения.

В настоящее время я использую javax.crypto.KeyGenerator (AES) для генерации ключа с использованием SecureRandom .

Как я могу передать свой собственный seen вместо того, чтобы использовать SecureRandom object?

код, который я в настоящее время использую :

//

 KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128,SecureRandom random); // 128 bits key size
key = kgen.generateKey();
  

//

Спасибо..

Комментарии:

1. Зачем вам это нужно? Если вам нужен способ получения того же ключа из того же пароля или аналогичного неслучайного ввода, вам следует обратиться к PBKDF2 или какой-либо другой функции получения ключа.

2. На самом деле я хочу сгенерировать ключ, начальное значение которого является производным от некоторого фиксированного значения.

3. Просто «сгенерируйте» байты ключа по своему усмотрению и используйте SecretKeySpec напрямую. Вы можете реализовать свой собственный SecureRandom и передать его в KeyGenerator , но у вас нет реального контроля над тем, как генератор ключей использует этот случайный объект и сколько случайных байт он берет из него для генерации ключа.

4. спасибо, сэр. Я реализовал SecureRandom .

Ответ №1:

Вы можете установить начальное значение SecureRandom .

 SecureRandom random = new SecureRandom();
random.setSeed(1000L);
  

При тестировании этого я заметил, что для получения согласованных результатов вам пришлось воссоздать KeyGenerator , если вы изменили начальное значение в любое время.