Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java提示密码短语生成的不受保护的私有ssh密钥_Java_Ssh_Rsa_Private Key - Fatal编程技术网

java提示密码短语生成的不受保护的私有ssh密钥

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

我打算使用Java生成一个ssh密钥对。对于私钥,未设置密码短语。密钥以Base64编码字符串的形式保存到文件中

问题是私钥似乎受到密码短语的保护。如果我使用命令ssh-keygen-y-f测试密钥,则不会显示公钥,而是请求密码短语。如果我只需按enter键,就会得到响应
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个字符(最后一个字符除外),请参见此答案:可能文件格式错误。有很多格式,为什么你认为你选择了正确的格式?