Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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 JSCH-传递私钥字符串而不是文件路径_Java_Jsch - Fatal编程技术网

Java JSCH-传递私钥字符串而不是文件路径

Java JSCH-传递私钥字符串而不是文件路径,java,jsch,Java,Jsch,如何将私钥(内容而不是文件)传递给JSCH(用于sftp) 不使用KeyPair.load(JSch-JSch,String-prvfile,String-pubfile)您可以使用重载方法KeyPair.load(JSch-JSch,byte[]prvkey,byte[]pubkey)。它应该支持直接加载内容。来源:apidoc。我一直在努力解决同样的问题,但我找到了一个解决方案,您必须在包含私钥的字符串中添加回车字符,并将其转换为ASCII码: private static byte[] r

如何将私钥(内容而不是文件)传递给JSCH(用于sftp)

不使用
KeyPair.load(JSch-JSch,String-prvfile,String-pubfile)
您可以使用重载方法
KeyPair.load(JSch-JSch,byte[]prvkey,byte[]pubkey)
。它应该支持直接加载内容。来源:apidoc。

我一直在努力解决同样的问题,但我找到了一个解决方案,您必须在包含私钥的字符串中添加回车字符,并将其转换为ASCII码:

private static byte[] readKey(String keyFileContent){

    keyFileContent = keyFileContent.replace("-----BEGIN RSA PRIVATE KEY-----", "-----BEGIN RSA PRIVATE KEY-----\r\n").replace("-----END RSA PRIVATE KEY-----", "\r\n-----END RSA PRIVATE KEY-----");
    return keyFileContent.getBytes(StandardCharsets.US_ASCII);

}
然后,可以通过以下方式调用addIdentity函数:

 jsch.addIdentity("myconnection", readKey(privateKeyString), null, null);
然后,您可以按照文档中的示例进行操作:

您无需添加任何内容。正确格式的键包含新行。如果你必须添加它们,那只是因为你之前已经删除了它们。我在用Android读取文件时遇到了这个问题,我相信这取决于你如何读取文件,也许最好是使用正则表达式检查是否存在回车符和换行符,并在必要时添加它们。也许你应该添加一个完整的代码,包括阅读部分。否则你的回答就没有意义了。