Реализовать алгоритм RSA в Java - PullRequest
2 голосов
/ 25 апреля 2010

Я хочу реализовать алгоритм RSA для шифрования изображения (byte[]). Для генерации двух моих ключей я использовал этот фрагмент кода:

KeyPairGenerator keygen = KeyPairGenerator.getInstance("RSA");
keygen.initialize(512);
keyPair = keygen.generateKeyPair();

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

Использование keygen.getPrivateKey() и keygen.getPublicKey() дает мне всю информацию об алгоритме RSA, а не только нужные мне ключи.

Спасибо

Ответы [ 3 ]

4 голосов
/ 25 апреля 2010

С помощью релевантных классов KeySpec вы можете вызывать методы getModulus () и getPublicExponent () / getPrivateExponent () для извлечения ключевых компонентов:

KeyFactory fact = KeyFactory.getInstance("RSA");
RSAPublicKeySpec pub = fact.getKeySpec(kp.getPublic(),
  RSAPublicKeySpec.class);
RSAPrivateKeySpec priv = fact.getKeySpec(kp.getPrivate(),
  RSAPrivateKeySpec.class);

saveToFile("public.key", pub.getModulus(),
  pub.getPublicExponent());
saveToFile("private.key", priv.getModulus(),
  priv.getPrivateExponent());

В случае, если это полезно, я недавно написал несколько статей о некоторых деталях шифрования RSA в Java (и вообще криптографии на основе Java.

0 голосов
/ 25 апреля 2010

То, что вы публикуете, не имеет никакого смысла, так как getPublicKey () и getPrivateKey () возвращают именно то, что вы говорите, что вам нужно. Однако, если вы хотите извлечь компоненты, вы должны просто привести ваши PublicKey и PrivateKey к RSAPublicKey и RSAPrivateKey, а не проходить через риторику использования KeySpecs.

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

0 голосов
/ 25 апреля 2010

Вы можете использовать Key.getEncoded (), чтобы получить байты ключа.

http://java.sun.com/j2se/1.4.2/docs/api/java/security/Key.html#getEncoded%28%29

...