AsymmetricCipherKeyPair

AsymmetricCipherKeyPair

我正在使用Bouncy Castle软件包在平台上生成 key 对。

SecureRandom random = new SecureRandom();

ECKeyPairGenerator pGen = new ECKeyPairGenerator();

ECKeyGenerationParameters genParam = new ECKeyGenerationParameters(params,random);

pGen.init(genParam);

AsymmetricCipherKeyPair pair = pGen.generateKeyPair();

在这里,pair的类型为AsymmetricCipherKeyPair。而且,我需要使用此对在服务器上生成X509V1Certificate。但是,X509Certificate的setPublicKey(PublicKey pubkey)仅接受PublicKey类型的对象。因此,我需要从服务器上的PublicKey中检索AsymmetricCipherKeyPair。但是,我得到了ECPublicKeyParameters,但是setPublicKey方法不接受。

因此,我的要求是从PublicKey获取AsymmetricCipherKeyPair

最佳答案

最简单的方法是将BouncyCaSTLe用作JavaCryptoProvider:

  • 生成 key 对
    KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "BC");
    ECGenParameterSpec ecsp = new ECGenParameterSpec(keyAlg);
    kpg.initialize(ecsp);
    KeyPair kp = kpg.generateKeyPair();
    
  • 使X509v1证书
    X509V1CertificateGenerator certGen = new X509V1CertificateGenerator();
    X500Principal dnName = new X500Principal("CN=C3");
    Calendar c = Calendar.getInstance();
    c.add(Calendar.YEAR, 10);
    certGen.setSerialNumber(keyId);
    certGen.setIssuerDN(dnName);
    certGen.setNotBefore(new Date());
    certGen.setNotAfter(c.getTime());
    certGen.setSubjectDN(dnName);
    certGen.setPublicKey(keyPair.getPublic());
    certGen.setSignatureAlgorithm("SHA256withECDSA");
    certGen.generate(keyPair.getPrivate(), "BC");
    
  • 关于java - 如何从AsymmetricCipherKeyPair获取公钥,而不是公钥密码参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9664443/

    10-10 19:21