5

我正在做 publicKey.getEncoded(),然后将“ssh-rsa”附加到前面,然后对其进行 base64 编码。然后我添加 SSH2 页眉/页脚。但它不会解码...

4

1 回答 1

19

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。

于 2010-08-27T21:54:38.513 回答