13.09.2006 15:21:53КриптоПро JCP. Генерация ключей. Ответов: 3
Иван
Пытаюсь создать ключи как указано в примере:
try
{
java.security.KeyPairGenerator keyGen = java.security.KeyPairGenerator.getInstance("GOST3410");
java.security.KeyPair keys = keyGen.generateKeyPair();
}
catch ...

Выдает сообщение:
java.security.NoSuchAlgorithmException: GOST3410 KeyPairGenerator not available

Почему недоступен? Пишу в Sun Java Studio Enterprise 8. JCP установлен, контрольная панель работает.
 
Ответы:
13.09.2006 17:42:16Иван
Сделал по другому. Вместо:
java.security.KeyPairGenerator keyGen = java.security.KeyPairGenerator.getInstance("GOST3410");
Написал
ru.CryptoPro.JCP.Key.GostKeyPairGenerator = new ru.CryptoPro.JCP.Key.GostKeyPairGenerator();

Не знаю на сколько правильно, но заработало. Запускается биологический ДСЧ, ключи генерятся. Возникла другая проблема. При генерации самоподписанного сертификата (писал по вашему примеру из документации):
byte[] encodedCert = Request.getEncodedSelfCert( keypair, certName);
Выскакивает исключение
java.security.NoSuchAlgorithmException: CPRandom SecureRandom not available
В чем же дело. Пишу программу прямо как в примере, нифига не работает. Объяните, либо я в чем то не прав, либо "Руководство программиста JCP" не актуально.
14.09.2006 11:42:53Иван
Приношу свои извенения за резкость.
Вопрос решен, то был абсолютно мой баг :)
14.09.2006 14:00:23Александр
Можно java.security.KeyPairGenerator keyGen = java.security.KeyPairGenerator.getInstance("GOST3410");

так и так

ru.CryptoPro.JCP.Key.GostKeyPairGenerator = new ru.CryptoPro.JCP.Key.GostKeyPairGenerator();

Разница в том как Вы дальше будете эти классы использовать. В первом случае Вы будите работать через интерфейс java верхнего уровня, во втором через интерфейс провайдера, смешивать эти два подхода, за редким исключением, нельзя. Лучше использовать java.security.