3
我在做publicKey.getEncoded(),然後在前面追加「ssh-rsa」,然後base64對它進行編碼。然後我添加SSH2頭/頁腳。但它不會解碼...鑑於Java ssh-rsa PublicKey,我如何構建SSH2公鑰?
我在做publicKey.getEncoded(),然後在前面追加「ssh-rsa」,然後base64對它進行編碼。然後我添加SSH2頭/頁腳。但它不會解碼...鑑於Java ssh-rsa PublicKey,我如何構建SSH2公鑰?
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。
如果我需要PEM編碼私鑰,我是否需要做類似的事情? – pizzathehut 2010-08-27 23:14:08
這取決於您想與之互操作的應用程序。如果你只需要OpenSSL格式的密鑰(沒有嵌入到證書中),那麼你需要找出格式是什麼(可能是模數和公開指數以相似的格式,可能是ASN.1序列)和編碼它自己。 – erickson 2010-08-28 02:14:54
一直在尋找這個代碼示例的小時。謝謝!希望我能給你多一點聲望點。 :) – 2011-10-31 21:04:26