2010-09-14 3 views
0

Мне нужно использовать openssl в java-коде. напримерСоздание ключей с помощью openssl в java

$ openssl genrsa -out private.pem 2048 

$ openssl pkcs8 -topk8 -in private.pem -outform DER -out private.der -nocrypt 

$ openssl rsa -in private.pem -pubout -outform DER -out public.der 

Есть библиотека или способ ее реализации?

+0

Вы просто ищете способ выполнения этих трех операторов в Java-коде? Есть ли причина, по которой вы хотите их использовать в коде, в отличие от сценария партии или оболочки? – Sean

+0

Мне нужно вызвать эти команды в java-коде, потому что я буду использовать эти файлы позже в коде. На самом деле основная проблема заключается в том, что третья команда использует тот же файл со второй командой, потому что вторая команда не завершает третью команду. Некоторые спящие решают проблему, но это рискованно –

ответ

0

Лучшим способом является использование библиотеки Java для этих действий. Я не могу написать точный код прямо сейчас, но это не очень сложно. Посмотрите на java.security.KeyPairGenerator и так далее. И это будет хороший опыт в понимании криптографии.

Но если вам нужно только вызвать эту три командной строки, вызов Process.waitFor() - это ответ. Вы можете использовать этот класс.

package ru.donz.util.javatools; 

import java.io.*; 

/** 
* Created by IntelliJ IDEA. 
* User: Donz 
* Date: 25.05.2010 
* Time: 21:57:52 
* Start process, read all its streams and write them to pointed streams. 
*/ 
public class ConsoleProcessExecutor 
{ 
    /** 
    * Start process, redirect its streams to pointed streams and return only after finishing of this process 
    * 
    * @param args  process arguments including executable file 
    * @param runtime just Runtime object for process 
    * @param workDir working dir 
    * @param out   stream for redirecting System.out of process 
    * @param err   stream for redirecting System.err of process 
    * @throws IOException 
    * @throws InterruptedException 
    */ 
    public static void execute(String[] args, Runtime runtime, File workDir, OutputStream out, OutputStream err) 
      throws IOException, InterruptedException 
    { 
     Process process = runtime.exec(args, null, workDir); 

     new Thread(new StreamReader(process.getInputStream(), out)).start(); 
     new Thread(new StreamReader(process.getErrorStream(), err)).start(); 

     int rc = process.waitFor(); 
     if(rc != 0) 
     { 
      StringBuilder argSB = new StringBuilder(); 
      for(String arg : args) 
      { 
       argSB.append(arg).append(' '); 
      } 
      throw new RuntimeException("Process execution failed. Return code: " + rc + "\ncommand: " + argSB); 
     } 
    } 

} 

class StreamReader implements Runnable 
{ 
    private final InputStream in; 
    private final OutputStream out; 


    public StreamReader(InputStream in, OutputStream out) 
    { 
     this.in = in; 
     this.out = out; 
    } 

    @Override 
    public void run() 
    { 
     int c; 
     try 
     { 
      while((c = in.read()) != -1) 
      { 
       out.write(c); 
      } 
      out.flush(); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 
Смежные вопросы