KeyPairGenerator не генерирует случайные ключи - PullRequest
0 голосов
/ 18 марта 2011

Я генерирую пару ключей RSA с KeyPairGenerator, и я заметил, что все время она генерирует точно совпадающие ключи, а не случайные, как должно быть? Может быть, у кого-то есть идеи, почему это может быть?

Мой код выглядит следующим образом:

private static KeyPair generateKeyPair(Provider provider, int keySize) throws Exception
{

    KeyPair keyPair = null;

    /* get the eracom keystore - access to the adapter */
    //KeyStore keyStore = KeyStore.getInstance("CRYPTOKI", provider.getName());
    KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA", provider.getName());

    keyPairGenerator.initialize(keySize);
    keyPair = keyPairGenerator.generateKeyPair();

    return keyPair;
}

решена проблема: Это была проблема с HSM и провайдером, которого я использую. Посмотрите на комментарий к ответу Йоахима Зауэра.

Ответы [ 3 ]

1 голос
/ 18 марта 2011

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

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");

keyPairGenerator.initialize(1024);
keyPair = keyPairGenerator.generateKeyPair();
System.out.println(keyPair.getPrivate());
System.out.println(keyPair.getPublic());

Возможно ли, что вы используете провайдера... плохо себя ведет? Какое значение provider.getName()?

1 голос
/ 30 ноября 2014

Я столкнулся с той же проблемой. Код, который работал для меня:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");    
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
keyGen.initialize(1024,random);
KeyPair key = keyGen.generateKeyPair();

Теперь распечатайте их, чтобы самостоятельно проверить, отличаются ли ключи, используя:

System.out.println(key.getPrivate());
System.out.println(key.getPublic());

Генератор SecureRandom создает новое случайное число с использованием данного алгоритма (SHA1PRNG) в этом случае и привилегированного пользователя (в данном случае SUN). Вы можете найти больше информации здесь: https://docs.oracle.com/javase/tutorial/security/apisign/step2.html и API здесь: http://docs.oracle.com/javase/8/docs/api/java/security/SecureRandom.html

0 голосов
/ 18 марта 2011

Вы его инициализировали. Согласно здесь это должно выглядеть примерно так:

KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
generator.initialize(1024);
KeyPair keyPair = generator.generateKeyPair();
...