#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
, если вы изменили начальное значение в любое время.