1.先配置好openssl 环境变量
保证cmd 输入openssl能够找到命令
2.java 代码
package com.openssl;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
class StreamDrainer implements Runnable {
private InputStream ins;
public StreamDrainer(InputStream ins) {
this.ins = ins;
}
public void run() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
ins));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class TestRunCmd {
/** rsa 公钥 */
private static String RSA_PUBLIC_KEY_FILE = "rsa_public_key.pem";
public static void main(String[] args) {
String rsaPrivate = "";
String rsaPublic = "";
String command = "openssl genrsa -out rsa_private_key.pem 1024";
cmdExec(command, false);
command = "openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem";
cmdExec(command, false);
command = "openssl pkcs8 -topk8 -nocrypt -inform PEM -in rsa_private_key.pem -outform PEM outform";
String returnStr = cmdExec(command, true);
if (returnStr != null && returnStr.length() > 0) {
//过滤空值、头、尾
rsaPrivate = returnStr.replace(" ", "")
.replace("-----BEGINPRIVATEKEY-----", "")
.replace("-----ENDPRIVATEKEY-----", "");
}
rsaPublic = readFile(new File(RSA_PUBLIC_KEY_FILE));
if (rsaPublic != null && rsaPublic.length() > 0) {
rsaPublic = rsaPublic.replace(" ", "")
.replace("-----BEGINPUBLICKEY-----", "")
.replace("-----ENDPUBLICKEY-----", "");
}
System.out.println("私钥: " + rsaPrivate);
System.out.println("公钥: " + rsaPublic);
}
public static String cmdExec(String command, boolean isReturn) {
String returnStr = "";
String[] cmd = new String[] { "cmd.exe", "/C", command };
try {
Process process = Runtime.getRuntime().exec(cmd);
if (isReturn) {
returnStr = result(process.getInputStream());
} else {
new Thread(new StreamDrainer(process.getInputStream())).start();
}
new Thread(new StreamDrainer(process.getErrorStream())).start();
process.getOutputStream().close();
int exitValue = process.waitFor();
System.out.println("返回值:" + exitValue);
} catch (Exception e) {
e.printStackTrace();
}
return returnStr;
}
public static String result(InputStream ins) {
StringBuilder sb = new StringBuilder(1000);
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
ins));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
sb.append(line);
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
public static String readFile(File file) {
StringBuilder sb = new StringBuilder(1000);
FileInputStream fis = null;
BufferedReader reader = null;
try {
fis = new FileInputStream(file);
reader = new BufferedReader(new InputStreamReader(
fis));
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
reader.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
}
结果:
私钥: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAL1Vv8RsPrZw46j3Vc02VHOrJtwpH3l9mHnsGGTz8GJrw3R6RZ/k6vtbaZYDEZnQ5EuXunTT2c3rw9/zjE+n/26mGWKfpyS/T2Zg5OyUtR5lwRohWXfKOuXY3FSM97JAV4iS0XElIIoK7S0i6ON0gxFNGXzD06FTz1Nqd8YDJgNvAgMBAAECgYAKzItFjs785O93QbQ5IjIq7sYmpInRCiLaQWcayvcZBgB98kNqXUox0ALztXUZitqanSrbYwH3Rs1DRsbn/DMLaVWb5QGl3e3mL6ZfqcdqaN7aITi+WZ8XKDj4FUDJQz7mH3AjnVkqKjyBfWhWMNqgGlvtMXHo6+j7GyXIgujfwQJBAPXFLtLuUmPbA5NohCgvnmz7NFpiqr5O0pGC5oj2IMI3T9xUVvd8RPfKKIGUHmVF9MI3+dSUNgFGZsBY4ItSXb8CQQDFNzeXvsnk2mwCusbshB4Ed1gkutYy3EUu9bGHB0krYkj9SPse7q3DGXLl9z7h+2/A+5EV72cWr1gKn/Ju1CZRAkEA5LIv+Ce8kx7iHPFMyPhGu7Kl7NWTfLNsTes5Com9wfwmXCg/JNyGcO20858ZCbQnJfNgjue7uUQBqUsK55olkQJBAJ478n/vVYAofDcoc0j7rDX7J564xfoi3+OQwHLNtrh3cIbA0rP73zFFrvmyiiK5Ie5eKgfGgRkjcOl9cf/YejECQFIOjf9hHc25nb1iBLaadTe5aAXn6lS2K8RqQvzi8Ll/MkU/D0pvLZn6aEYHEhQ7FVXei+QY0eY1rzVrK0Vwbos=
公钥: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9Vb/EbD62cOOo91XNNlRzqybcKR95fZh57Bhk8/Bia8N0ekWf5Or7W2mWAxGZ0ORLl7p009nN68Pf84xPp/9uphlin6ckv09mYOTslLUeZcEaIVl3yjrl2NxUjPeyQFeIktFxJSCKCu0tIujjdIMRTRl8w9OhU89TanfGAyYDbwIDAQAB