我正在执行publicKey.getEncoded(),然后在前面添加“ssh-rsa”,接着对其进行base64编码。然后我加上了SSH2的头/尾。但是它无法解码...
我正在执行publicKey.getEncoded(),然后在前面添加“ssh-rsa”,接着对其进行base64编码。然后我加上了SSH2的头/尾。但是它无法解码...
Java公钥被编码为标准的X.509 SubjectPublicKeyInfo结构。
SSH2使用自己的简单格式。对下面所示的encode
方法的结果进行Base-64编码,并添加必要的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)进行转换。
byte[] b = new Buffer.PlainBuffer().putPublicKey(key).getCompactData()
,然后使用Base64.getEncoder().encodeToString(b)
进行base64编码。 - Raul Santelicesssh-rsa
头即可。return "ssh-rsa " + Base64.getEncoder().encodeToString(b);
- Aaron Tobias