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解析错误,不是序列
以下是我尝试跟进但仍无法解决的一些其他链接。
希望有人可以指引我正确的方向。
谢谢!
我想出了答案。下面的帖子给了我一个方向。
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,...)
| 归档时间: |
|
| 查看次数: |
1155 次 |
| 最近记录: |