5

publicKey.getEncoded()を実行してから、先頭に「ssh-rsa」を追加してから、base64でエンコードしています。次に、SSH2ヘッダー/フッターを追加します。しかし、それはデコードされません...

4

1 に答える 1

19

Java公開鍵は、標準のX.509SubjectPublicKeyInfo構造としてエンコードされます。

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への反対方向の変換については、この回答を参照してください。

于 2010-08-27T21:54:38.513 に答える