2010-08-27 30 views

回答

13

Java公鑰被編碼爲一個標準的X.509 SubjectPublicKeyInfo結構。

SSH2使用它自己的簡單格式。 Base-64對下面顯示的encode方法的結果進行編碼,並添加必要的SSH2頁眉和頁腳。

public static byte[] encode(RSAPublicKey key) 
    throws IOException 
{ 
    ByteArrayOutputStream buf = new ByteArrayOutputStream(); 
    byte[] name = "ssh-rsa".getBytes("US-ASCII"); 
    write(name, buf); 
    write(key.getPublicExponent().toByteArray(), buf); 
    write(key.getModulus().toByteArray(), buf); 
    return buf.toByteArray(); 
} 

private static void write(byte[] str, OutputStream os) 
    throws IOException 
{ 
    for (int shift = 24; shift >= 0; shift -= 8) 
    os.write((str.length >>> shift) & 0xFF); 
    os.write(str); 
} 

用於將另一個方向上,從OpenSSH的到Java參見this answer

+0

如果我需要PEM編碼私鑰,我是否需要做類似的事情? – pizzathehut 2010-08-27 23:14:08

+0

這取決於您想與之互操作的應用程序。如果你只需要OpenSSL格式的密鑰(沒有嵌入到證書中),那麼你需要找出格式是什麼(可能是模數和公開指數以相似的格式,可能是ASN.1序列)和編碼它自己。 – erickson 2010-08-28 02:14:54

+1

一直在尋找這個代碼示例的小時。謝謝!希望我能給你多一點聲望點。 :) – 2011-10-31 21:04:26