有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在尝试使用Java代码中的JSch库SSH到EC2。我在SOHow can I use .pem files content as a string in ec2 connection using JSch library中引用了这个链接,并尝试了下面提到的几件事情,但都没有成功。有人能指导我如何实现我的目标吗

目标

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

addIdentity(String name, byte[] prvkey, byte[] pubkey, byte[] passphrase)
    throws JSchException
-----BEGIN RSA PRIVATE KEY-----
MIIepsdfAIBAAKCAQEAtBk068z
...
xVNdhlDy6asdk9wsdQ==
-----END RSA PRIVATE KEY-----

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

addIdentity ("username","{privatekey string converted to byte array}",null, null)

我想知道那根弦是怎么形成的?我对密码学非常陌生,但在这个过程中,我了解到,因为我的PEM有^{,它是PKCS1格式。JSch支持PKCS1格式还是需要转换为PKSC8

其次,我知道主体是用Base64编码的,所以在去掉所有回车、页眉和页脚后,我甚至尝试用Base64解码字符串,这给了我类似的错误

Exception in thread "main" java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : algid parse error, not a sequence

下面是一些我试图跟进但未能解决的附加链接

希望有人能指引我正确的方向

谢谢


共 (1) 个答案

  1. # 1 楼答案

    我找到了答案。 下面的帖子给了我一个方向

    JSch: addIdentity from private key stored on hdfs

    对于其他希望解决类似需求的人,请确保没有删除页眉、页脚信息。这花了我大部分时间进行调试,因为大多数博客/SO帖子都指向剥离这些角色。在Java中,字符串必须有回车符,否则可能会得到完全不同的字节数组

    String  x = "  -BEGIN RSA PRIVATE KEY  -\r\n" + 
                "MIIEpAIBAAKCAQEAtBk\Q/z4QAgk+LN3IUajqjUv7IucsCd4SebbQvah5t4WJ\r\n"
    

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

    jsch.addIdentity("username",{bytearray of x},null, null)
    

    注意:确保传递的是无符号字节数组,如:
    阵列(45,45,69,…)
    而不是
    阵列(45,-35,-125,…)