2013-08-29 2 views
3

У меня возникла проблема с преобразованием строки, содержащей открытый ключ RSA, который я сгенерировал с помощью SSh-keygen в cygwin, в тип public_java java.security.Разница между генерируемым Java открытым ключом и сгенерированным ssh-keygen ключом

Вот код, я использую для преобразования ключей

BASE64Decoder decoder = new BASE64Decoder(); 
    byte[] privBytes = decoder.decodeBuffer(publicKey); 
    KeyFactory keyFact = KeyFactory.getInstance("RSA"); 
    PublicKey testKey = keyFact.generatePublic(new X509EncodedKeySpec(publicBytes)); 

Этот код дает мне эту ошибку

java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key format 

При использовании этого ключа (генерируется через Cygwin)

AAAAB3NzaC1yc2EAAAADAQABAAABAQDQQ8K7FN3IvoLsgxyTHHidrhrp/4L1ts7fc5ooKi2lAw8pXYSseTH/ScS7qCCTTsBJ0DgdHdzjaHn8dTpOvud5Za0eiJtbPSyFmkNIwGYLXI/AnzF0sRNbSGmBeB/jQtRJBTS+1x5sVwOwGdx1jTx5m7yTmBjn9+/Hftke6UBY9dLKcRph2gpyRx1OWSFKC+mheBjpwGgapQNHFTPvhgQPp99HdGufBDiQWw4o4bIE7XIEyMpIt6KAsucbWSh67zYTaQjYzj8Bu3asCIlBy7KfdLWgrtgxddwtPjfYL3ZtGmhd3IiIwRdHQFHrJP0KbEejhJQF+2ApqFhL8yk+O3wL 

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

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTK5ad+TnBo/N6FbPtFOtE4crvXkQUimp+gLLp 
OA8QRpzTFD9zIV42695rYqmAHZRfBPA8TjEj9WXw0yRAIL3+hbHmOnLyrLfJ+5pD05B7ul83OKgV 
mkLtZQacTNjX2iIeNd08ecP4+Chh/uE2dIRxHX1W00TZINySqxgW1cpjiwIDAQAB 

Итак, я полагаю, что мой вопрос, в чем разница между этими двумя ключами, и как я могу успешно преобразовать первый в работоспособное объект PublicKey?

+0

Возможно, вас заинтересует [этот вопрос] (http://stackoverflow.com/q/12749858/372643), почти дубликат. – Bruno

ответ

2

Первый ключ находится в формате ssh-rsa. Второй ключ - PKCS8.

Вы можете использовать опцию -m для ssh-keygen, чтобы сгенерировать ключ в формате, поддерживаемом java.