почему ключ aes должен генерироваться случайным образом? - PullRequest
1 голос
/ 19 ноября 2009

когда вы хотите что-то зашифровать, не хотите, чтобы ключ для расшифровки определялся вами, а не генератором какого-то генератора случайных чисел?

Я вижу этот код в сообщении stackoverflow. но я не хочу, чтобы ключ генерировался случайным образом, я хочу, чтобы пользователю было предложено ввести ключ, и на этом основании должно произойти шифрование ..

какие-либо предложения, как мне изменить код?

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec spec = new PBEKeySpec(password, salt, 1024, 256);
SecretKey tmp = factory.generateSecret(spec);
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");

Ответы [ 2 ]

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

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

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

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

Код, который вы показываете, не генерирует случайный ключ. Сгенерированный ключ является функцией пароля и будет одинаковым при каждом использовании данного пароля.

В этом случае пользователю необходимо ввести password. Этот пароль используется в качестве начального числа для алгоритма, который детерминистически создает строку байтов, которую можно использовать в качестве криптографического ключа.

Существует что-то, что должно выбираться случайным образом для каждой операции: вектор инициализации, используемый для шифров в режиме CBC. Это создает разные шифротексты, даже если один и тот же ключ используется для шифрования одного и того же открытого текста.

...