如何从 Java 生成 ssh 兼容的 id_rsa(.pub)
我正在寻找一种在 Java 中以编程方式创建 ssh 兼容的 id_rsa 和 id_rsa.pub 文件的方法。
我已经创建了密钥对:
KeyPairGenerator generator;
generator = KeyPairGenerator.getInstance("RSA");
// or: generator = KeyPairGenerator.getInstance("DSA");
generator.initialize(2048);
keyPair = generator.genKeyPair();
但是我不知道如何在密钥对中创建私钥和公钥的字符串表示形式。
I'm looking for a way to programmatically create ssh compatible id_rsa and id_rsa.pub files in Java.
I got as far as creating the KeyPair:
KeyPairGenerator generator;
generator = KeyPairGenerator.getInstance("RSA");
// or: generator = KeyPairGenerator.getInstance("DSA");
generator.initialize(2048);
keyPair = generator.genKeyPair();
I can't figure out however how to create the String representation of the PrivateKey and PublicKey in the KeyPair.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
ssh 使用的密钥格式在 RFC #4253 中定义。 RSA 公钥的格式如下:
所有数据类型编码均在 RFC 的第 #5 节中定义#4251。 string 和 mpint(多精度整数)类型以这种方式编码:
例如,字符串“ssh-rsa”的编码是:
对公共进行编码:
要获得密钥的字符串表示,只需以 Base64 编码返回的字节数组。
对于私钥编码有两种情况:
RSAPrivateKey
上的getEncoded
来获取私钥的 PKCS8 编码。The key format used by ssh is defined in the RFC #4253. The format for RSA public key is the following :
All data type encoding is defined in the section #5 of RFC #4251. string and mpint (multiple precision integer) types are encoded this way :
for instance, the encoding of the string "ssh-rsa" is:
To encode the public :
To have a string représentation of the key just encode the returned byte array in Base64.
For the private key encoding there is two cases:
getEncoded
onRSAPrivateKey
.gotoalberto的答案(下面引用)针对另一个问题,适用于 RSA 和 DSA 密钥:
gotoalberto's answer (quoted below) for a different question works for both RSA and DSA keys:
正如 Carsten 提到的,JSch 可以轻松生成这些密钥对。
请参阅其示例 KeyGen.java
As Carsten has mentioned, JSch can generate those keypair easily.
Refer to its example, KeyGen.java
任何 PublicKey 类型(RSA、DSA 等)的通用解决方案都是使用 SSHJ 的单行:
然后使用 Base64.getEncoder().encodeToString(b) 进行编码>。
The generic solution for any
PublicKey
type (RSA, DSA, etc.) is a one-liner using SSHJ:and then encode using
Base64.getEncoder().encodeToString(b)
.