Открытые ключи 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.