2014-10-02 225 views
1

我有以下的公鑰(作爲一個例子):如何將RSA公鑰轉換爲Java中的ssh-rsa公鑰?

-----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) – 2014-10-02 21:23:24

+0

不幸的是,那根本不會返回正確的值。我得到字節數組,base64-ify它,並且它不符合預期的結果。這是正確的長度和前31個字符匹配,但其餘的不是。我假設前31個是由於sha-rsa被預先添加到字節數組中。 – 2014-10-02 22:10:25

回答

0

好吧,這不是我想象的那樣。事實證明,Ebbe M. Pedersen提供的鏈接畢竟是正確的。我一直在比較得到的字符串與錯誤的已知鍵值。所以,這一直在努力,我的大腦根本沒有工作。