Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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运行openssl命令?_Java_Openssl - Fatal编程技术网

如何使用运行时从JAVA运行openssl命令?

如何使用运行时从JAVA运行openssl命令?,java,openssl,Java,Openssl,我想读取使用PuttyGen生成的私钥和公钥,因为我使用openssl将它们转换为DER格式 String[] execStr = {"openssl","pkcs8", "-topk8", "-inform", "PEM", "-outform","DER", "-in", "src\\srcData\\openssh1\\privateKey.pem","-out", "src\\srcData\\openssh1\\privateKey.der" }; File execDir = ne

我想读取使用PuttyGen生成的私钥和公钥,因为我使用openssl将它们转换为DER格式

String[] execStr = {"openssl","pkcs8", "-topk8", "-inform", "PEM", "-outform","DER", "-in", "src\\srcData\\openssh1\\privateKey.pem","-out", "src\\srcData\\openssh1\\privateKey.der" };

File execDir = new File("C:\\openssl-1.0.2d-fips-2.0.10\\bin");

Runtime.getRuntime().exec(execStr,null,execDir);
但我得到了这个错误:

Exception in thread "main" java.io.IOException: Cannot run program "openssl" (in directory "C:\openssl-1.0.2d-fips-2.0.10\bin"): CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1059)
    at java.lang.Runtime.exec(Runtime.java:631)
    at PrivateKeyReader.get(PrivateKeyReader.java:21)
    at Test1.main(Test1.java:50)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:455)
    at java.lang.ProcessImpl.start(ProcessImpl.java:151)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1040)
    ... 3 more
线程“main”java.io.IOException中的异常:无法运行程序“openssl”(在目录“C:\openssl-1.0.2d-fips-2.0.10\bin”中):CreateProcess error=2,系统找不到指定的文件 位于java.lang.ProcessBuilder.start(ProcessBuilder.java:1059) 位于java.lang.Runtime.exec(Runtime.java:631) 获取(PrivateKeyReader.java:21) 位于Test1.main(Test1.java:50) 原因:java.io.IOException:CreateProcess error=2,系统找不到指定的文件 在java.lang.ProcessImpl.create(本机方法) 位于java.lang.ProcessImpl。(ProcessImpl.java:455) 在java.lang.ProcessImpl.start(ProcessImpl.java:151)处 位于java.lang.ProcessBuilder.start(ProcessBuilder.java:1040) ... 3个以上
这里我无法找出确切的问题,如果有人知道,请告诉我。

我知道您下载了Windows版本的
openssl-1.0.2d-fips-2.0.10
。bin文件夹中包含的可执行文件称为
openssl.exe
,而不是
openssl
。因此,出现错误
,系统无法找到指定的文件。因此,您的
execStr
应该是
String[]execStr={“openssl.exe”,…

为了防止将来出现此问题,可以使用说明使Windows资源管理器显示完整的
openssl.exe
名称,而不是
openssl

还请注意,当您使用
C:\\openssl-1.0.2d-fips-2.0.10\\bin
作为
execDir
时,路径
src\\srcData\\openssh1\\privateKey.pem
相对于
execDir
进行解释。因此,您应该使用以下命令将其转换为绝对路径:

File inputFile = new File("src\\srcData\\openssh1\\privateKey.pem");

String[] execStr = {"openssl.exe ", ..., "-in", inputFile.getCanonicalPath(), ... };

输出文件也是如此。

我知道您下载了Windows版本的
openssl-1.0.2d-fips-2.0.10
。bin文件夹中包含的可执行文件名为
openssl.exe
,而不是
openssl
。因此,您会收到错误
系统无法找到指定的文件。
>因此,execStr
应该是
String[]execStr={“openssl.exe”,…

为了防止将来出现此问题,可以使用说明使Windows资源管理器显示完整的
openssl.exe
名称,而不是
openssl

还请注意,当您使用
C:\\openssl-1.0.2d-fips-2.0.10\\bin
作为
execDir
时,路径
src\\srcData\\openssh1\\privateKey.pem
相对于
execDir
进行解释。因此,您应该使用以下命令将其转换为绝对路径:

File inputFile = new File("src\\srcData\\openssh1\\privateKey.pem");

String[] execStr = {"openssl.exe ", ..., "-in", inputFile.getCanonicalPath(), ... };
这同样适用于输出文件