Java中的OpenSSL命令?

Java中的OpenSSL命令?,java,encryption,openssl,public-key,pkcs#8,Java,Encryption,Openssl,Public Key,Pkcs#8,所以我根据这个图坦卡蒙做了一个程序: 它工作得非常好,但正如您在页面底部看到的,它需要OpenSSL命令。我使用OpenSSL并以正确的格式生成密钥来测试我的程序,工作非常完美。但我想知道如何用Java生成这些密钥。我尝试过无数次,但加密对我来说太难理解,也很难使用。因此,我目前没有代码可以显示,我将如何开始,或者如果有人有这样做的好方法。如果可能的话,我不介意使用bouncy castle TL;DR:我想使用java(有或没有公共库)以正确的格式(PKCS#8,DER)生成一个唯一的私钥和

所以我根据这个图坦卡蒙做了一个程序:

它工作得非常好,但正如您在页面底部看到的,它需要OpenSSL命令。我使用OpenSSL并以正确的格式生成密钥来测试我的程序,工作非常完美。但我想知道如何用Java生成这些密钥。我尝试过无数次,但加密对我来说太难理解,也很难使用。因此,我目前没有代码可以显示,我将如何开始,或者如果有人有这样做的好方法。如果可能的话,我不介意使用bouncy castle

TL;DR:我想使用java(有或没有公共库)以正确的格式(PKCS#8,DER)生成一个唯一的私钥和公钥

只需在java中使用以下命令(不通过OpenSSL运行):

要生成长度为2048位的私钥:

openssl genrsa -out private.pem 2048
要将其转换为所需的(PKCS#8,DER)格式:

要从私钥生成公钥,请执行以下操作:

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

在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();
    }

}

首先。至少可以粗略地理解非对称密钥生成在编写代码时是如何工作的,这确实很有帮助——这样做更有意义。了解一些OpenSSL命令对你没有帮助。老实说,除非你有很多时间对OpenSSL工具本身进行反向工程,否则从第一手经验来看,你会发现这个看似简单的任务非常复杂和令人沮丧。Openssl是一个很难处理的文档库。是的,但我想知道是否可以使用bouncy castle或其他方法以正确的格式生成它们。这个问题似乎属于Stack Exchange网络中的另一个站点。也许superuser.com可以帮助在程序之间转换命令。这不是一个超级用户问题——这显然是一个关于Java编码的编程问题。
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();
    }

}