如何使用JSch库将PEM文件转换为ssh到ec2的字符串

Dwa*_*ior 5 java cryptography rsa jsch pem

我正在尝试使用Java代码中的JSch库将SSH SSH到EC2。我在SO中引用了此链接如何使用JSch库在ec2连接中将.pem文件内容用作字符串并尝试了下面提到的几件事,但没有成功。有人可以指导我如何实现我的目标吗?

目的

我有一个像这样的PEM文件。我不想将我的PEM文件存储在AWS中的任何位置,因此我的方法是提取一个等效字符串,我可以对其进行编码和存储在数据库中,然后从Java对其进行解码,以将参数传递给addIdentity采用以下参数的方法:

addIdentity(String name, byte[] prvkey, byte[] pubkey, byte[] passphrase)
    throws JSchException
Run Code Online (Sandbox Code Playgroud)
addIdentity(String name, byte[] prvkey, byte[] pubkey, byte[] passphrase)
    throws JSchException
Run Code Online (Sandbox Code Playgroud)

出于我的目标,我addIdentity相信我的方法是这样的:

addIdentity ("username","{privatekey string converted to byte array}",null, null)
Run Code Online (Sandbox Code Playgroud)

我试图了解如何形成字符串?我对密码学非常陌生,但是在此过程中,我了解到由于PEM具有BEGIN RSA PRIVATE KEY,它是PKCS1格式。JSch是否支持PKCS1格式,或者需要将其转换为PKSC8?

其次,我了解到主体是使用Base64编码的,因此我什至在剥离所有回车符,页眉和页脚后甚至尝试使用Base64解码字符串,这给了我这样的错误

线程“主”中的异常java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:IOException:algid解析错误,不是序列

以下是我尝试跟进但仍无法解决的一些其他链接。

希望有人可以指引我正确的方向。

谢谢!

Dwa*_*ior 5

我想出了答案。下面的帖子给了我一个方向。

JSch:来自存储在 hdfs 上的私钥的 addIdentity

对于希望解决类似要求的任何其他人,请确保您没有删除页眉、页脚信息。这花了我大部分时间来调试,因为大多数博客/SO 帖子都针对剥离这些字符。在 Java 中,你的字符串必须有回车,否则你可能会得到一个非常不同的字节数组。

String  x = "-----BEGIN RSA PRIVATE KEY-----\r\n" + 
            "MIIEpAIBAAKCAQEAtBk\Q/z4QAgk+LN3IUajqjUv7IucsCd4SebbQvah5t4WJ\r\n"
Run Code Online (Sandbox Code Playgroud)

使用“US-ASCII”字符集将字符串转换为字节数组。如果您没有密码,请使用以下 JSch 方法:

jsch.addIdentity("username",{bytearray of x},null, null)
Run Code Online (Sandbox Code Playgroud)

注意:确保您传递的是一个无符号字节数组,例如:
Array (45, 45, 69,...)
和 NOT
Array (45, -35, -125,...)