2014-10-02 5 views
1

У меня есть следующий открытый ключ (в качестве примера):Как преобразовать открытый ключ RSA в открытый ключ ssh-rsa в Java?

-----BEGIN PUBLIC KEY----- 
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjKAmiieDC6SEYpxdI5Kn 
iRUmUwE5EQL2nyDNDrV4dpC28mIcvKlCHWrq8YL7vpKya5GRUYl5xFNoB73s0UGn 
8AtZBlG82/vbAPI5g9OoF2Df+0PusG5da+yFZXJNIyx1Kmgp4Ca4BR4WHGYo2LiW 
zvhjCi9OBO6ERFrlCX1tGCI8mVxo54PzSMbo6LxYmJcJgUneVERjmQe1+tvggeP5 
J44xJB5ompRkXg3VEeqYiqC8RfU3cL2DxTLsQqz/ndtpyGwjd1VCreXZCveDJlHN 
WDZHvaHIReJa4aQp93NZVLhhVl0sHF1QM/7RSrDvRK7CGAZKq8COQ3/F2zLpMOPM 
PQIDAQAB 
-----END PUBLIC KEY----- 

Мне нужно, чтобы иметь возможность преобразовать его в формат, который можно вставить в файл SSH known_hosts. Например:

localhost ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDj0HsJJ4I0p+gRYrpv3JFORk0NFB8YwlRdGBxja453pBzMBm6LyEmSqZAvv0UCguLI+Avo1HmDLJlrWd+1wVECRNSxD9twqcD5pkQcowy5hWOH0KbmBIdoYQqkm+nGhwSLSDJ5wO9k/F26D03d5/c0gNjB9UU9HrJ8zyB185vezxc6VM/kLlcoUMHT1aL/+cxbvlq5tkJDCmEQg05k4LgBWdfwUAXA1n3DlI9bU+CWb9hnmBUPFMHge56+Z1fhaJfvVW6VxLMh/W1NxK1Cxo4ig+0U0fYInqoMNcBT/6C7P2OdA8DbESCF5E7/9/eTLfsbW7EB7Ka3Mfyfm2a0Cswx 

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

До сих пор я загружаю закрытый ключ из файла PEM и разбираю его так. PEMParser приходит от Надувного замка:

FileReader keyPairReader = new FileReader(new File(applicationPropertiesService.getConfigDir(), KEY_PAIR_FILE)); 
PEMParser parser = new PEMParser(keyPairReader); 

я затем получить публичные/приватные ключи от синтаксического анализатора.

PEMKeyPair pemKeyPair = (PEMKeyPair) parser.readObject(); 

Отсюда я могу получить объект SubjectPublicKeyInfo и я могу получить мои данные и кодировать его в base64:

String pkBase64 = new BASE64Encoder().encode(publicKey.getEncoded()) 

Это дает мне строку base64 в первом открытом ключе выше. Но, для жизни меня, я не могу понять, как получить формат ssh-rsa.

Любая помощь будет оценена по достоинству.

Спасибо!

+1

Посмотрите [здесь] (http://stackoverflow.com/questions/3588120/given-a-java-ssh-rsa-publickey-how-can-i-build-an-ssh2-public-key) –

+0

К сожалению, это просто не возвращает правильное значение. Я возвращаю массив байтов, base64-ify, и он не соответствует ожидаемому результату. Это правильная длина, и первые 31 символа совпадают, но остальная часть этого не делает. Я предполагаю, что первые 31 связаны с тем, что sha-rsa добавляется к массиву байтов. –

ответ

0

Хорошо, это было не совсем так, как я думал. Оказалось, что ссылка Ebbe M. Pedersen предоставлена ​​в конце концов. Я сравнивал полученную строку с неправильным известным значением ключа. Итак, это работало, мой мозг просто не работал.

Смежные вопросы