给定Java ssh rsa公钥,如何构建SSH2公钥?
我正在执行publicKey.getEncoded(),然后在前面添加“ssh rsa”,然后对其进行base64编码。然后添加SSH2页眉/页脚。但是它不会解码…Java公钥被编码为标准的X.509 SubjectPublicKeyInfo结构 SSH2使用自己的简单格式。Base-64对下面显示的给定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
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)代码>