java提示密码短语生成的不受保护的私有ssh密钥
我打算使用Java生成一个ssh密钥对。对于私钥,未设置密码短语。密钥以Base64编码字符串的形式保存到文件中 问题是私钥似乎受到密码短语的保护。如果我使用命令ssh-keygen-y-f测试密钥,则不会显示公钥,而是请求密码短语。如果我只需按enter键,就会得到响应java提示密码短语生成的不受保护的私有ssh密钥,java,ssh,rsa,private-key,Java,Ssh,Rsa,Private Key,我打算使用Java生成一个ssh密钥对。对于私钥,未设置密码短语。密钥以Base64编码字符串的形式保存到文件中 问题是私钥似乎受到密码短语的保护。如果我使用命令ssh-keygen-y-f测试密钥,则不会显示公钥,而是请求密码短语。如果我只需按enter键,就会得到响应load failed。对于使用命令ssh-keygen-f-t rsa-b4096生成的私钥,显示公钥不需要密码短语 我已经用java生成了密钥对,如下所示 public static void main(String
load failed
。对于使用命令ssh-keygen-f-t rsa-b4096生成的私钥,显示公钥不需要密码短语
我已经用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();
}
}
谢谢你的提示 谢谢你的评论
@罗伯特:实际上,将行长改为64个字符解决了这个问题。我还发现问题与ssh-keygen的版本有关。例如,在Linux Mint 19.x上,即使私钥行长度大于64个字符,也会显示公钥。如果使用例如Redhat 6,则私钥行长度>64个字符无效。感谢所有评论
@罗伯特:实际上,将行长改为64个字符解决了这个问题。我还发现问题与ssh-keygen的版本有关。例如,在Linux Mint 19.x上,即使私钥行长度大于64个字符,也会显示公钥。如果使用例如Redhat 6,则a私钥行长度>64个字符无效。base64编码的RSA私钥数据是否有换行符?行长度必须精确到64个字符(最后一个字符除外),请参见此答案:可能文件格式错误。有很多格式,为什么您认为您选择了正确的格式?base64编码的RSA私钥数据是否有换行符?行长度必须精确到64个字符(最后一个字符除外),请参见此答案:可能文件格式错误。有很多格式,为什么你认为你选择了正确的格式?