给定Java ssh rsa公钥,如何构建SSH2公钥?

给定Java ssh rsa公钥,如何构建SSH2公钥?,java,public-key,ssh-keys,Java,Public Key,Ssh Keys,我正在执行publicKey.getEncoded(),然后在前面添加“ssh rsa”,然后对其进行base64编码。然后添加SSH2页眉/页脚。但是它不会解码…Java公钥被编码为标准的X.509 SubjectPublicKeyInfo结构 SSH2使用自己的简单格式。Base-64对下面显示的encode方法的结果进行编码,并粘贴必要的SSH2页眉和页脚 public static byte[] encode(RSAPublicKey key) throws IOException

我正在执行publicKey.getEncoded(),然后在前面添加“ssh rsa”,然后对其进行base64编码。然后添加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的另一个方向,请参阅。

如果需要对私钥进行PEM编码,是否需要执行类似的操作?这取决于要与之交互的应用程序。如果您只需要OpenSSL格式的密钥(不嵌入证书中),是的,您需要找出该格式是什么(可能是类似格式的模数和公共指数,可能是ASN.1序列),然后自己对其进行编码。这个代码示例已经找了几个小时了。非常感谢。希望我能给你更多的荣誉积分。:)可以使用SSHJ在一行或两行中进行更通用的编码(也支持DSA和其他类型):
byte[]b=new Buffer.PlainBuffer().putPublicKey(key).getCompactData()
,然后使用
base64.getEncoder().encodeToString(b)
@RaulSantelices对其进行base64编码。我只需要将
ssh rsa
头添加到我的头中<代码>返回“ssh rsa”+Base64.getEncoder().encodeToString(b)