【发布时间】:2020-07-28 16:47:09
【问题描述】:
我正在尝试使用 Java 生成一个 ssh 密钥对。对于私钥,没有设置密码。密钥作为 Base64 编码字符串保存到文件中。
问题是私钥似乎受密码保护。如果我使用命令ssh-keygen -y -f <private key file> 测试密钥,则不会显示公钥,而是要求输入密码。如果我只是按回车键,我会得到回复load failed。对于使用命令ssh-keygen -f <key file name> -t rsa -b 4096 生成的私钥,无需密码即可显示公钥。
我已经在 java 中生成了如下所示的密钥对。
public static void main(String[] args) throws NoSuchAlgorithmException {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(4096);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
String privateKey = generatePrivateKey(keyPair.getPrivate());
saveKeyContent(privateKey);
}
private static String generatePrivateKey(PrivateKey privateKey) {
Base64.Encoder encoder = Base64.getEncoder();
String key = encoder.encodeToString(privateKey.getEncoded());
return String.format("%s%n%s%n%s", "-----BEGIN RSA PRIVATE KEY-----", key, "-----END RSA PRIVATE KEY-----");
}
private static void saveKeyContent(String content) {
try {
Path filePath = new File("d:\\tmp\\").toPath().resolve("testKey");
Files.write(filePath, content.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
感谢任何提示!
【问题讨论】:
-
base64 编码的 RSA 私钥数据是否有换行符? AFAIK 行长度必须正好是 64 个字符(最后一个字符除外),另请参阅此答案:crypto.stackexchange.com/a/52127/744
-
可能是文件格式错误。格式有很多,为什么你认为你选对了?
标签: java ssh rsa private-key