2014-04-27 172 views
1

所以我做了基於關閉此嘖嘖的程序: http://www.macs.hw.ac.uk/~ml355/lore/pkencryption.htmJava中的OpenSSL命令?

這工作完全正常,但你可以在頁面底部看到它需要OpenSSL的命令。我使用OpenSSL並以正確的格式生成我的密鑰來測試我的程序,完美地工作。但我想知道如何在Java中生成這些密鑰。我已經嘗試了無數次,但加密對我來說很難理解,並且與之合作。所以我目前沒有任何代碼可以顯示,我將如何開始或者如果有人有這樣做的好方法。如果可能的話,我不介意使用充氣城堡。

TL; DR:我想用正確的格式(PKCS#8,DER)使用java(帶或不帶公共庫)生成唯一的私鑰和公鑰。

只需要這些命令在Java中(通過OpenSSL的不運行):

要生成長度爲2048位的私鑰:

openssl genrsa -out private.pem 2048 

爲了得到它成所需的(PKCS#8,DER )格式:

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

爲了從私有密鑰的公共密鑰:

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

從[教程](http://docs.oracle.com/javase/tutorial/security/apisign/step2.html)開始。至少鬆散地理解非對稱密鑰生成如何工作編寫代碼真的有助於理解 - 它更有意義。瞭解一些OpenSSL命令不會對您有所幫助。 –

+0

老實說 - 除非你有很多時間基本上對openssl工具本身進行反向工程 - 你會發現這個看起來很簡單的任務非常複雜和令人沮喪,從第一手的經驗來講。 Openssl是一個悲慘的文件記錄庫來處理。 – Joe

+0

是的,但我想知道我是否可以使用彈性城堡或其他方式以正確的格式生成它們。 – Tevor

回答

1

在Java中生成RSA密鑰對很容易。例如:

import java.security.*; 
import java.security.interfaces.*; 

public class RSACreate { 

    public static void main(String[] args) throws Exception { 
     KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); 
     kpg.initialize(2048, new SecureRandom()); 
     KeyPair kp = kpg.generateKeyPair(); 
     RSAPrivateCrtKey rsaPriv = (RSAPrivateCrtKey) kp.getPrivate(); 
     RSAPublicKey rsaPub = (RSAPublicKey) kp.getPublic(); 
    } 

}