java - 如何从 AsymmetricCipherKeyPair 获取 PublicKey,而不是 publickeycipher 参数?

标签 java java-me x509certificate bouncycastle

我正在使用 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 类型的对象。所以我需要从服务器上的 AsymmetricCipherKeyPair 检索一个 PublicKey。但是,我得到了 ECPublicKeyParameterssetPublicKey 方法不接受它。

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

最佳答案

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

  1. 生成 key 对

    KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "BC");
    ECGenParameterSpec ecsp = new ECGenParameterSpec(keyAlg);
    kpg.initialize(ecsp);
    KeyPair kp = kpg.generateKeyPair();
    
  2. 制作 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 获取 PublicKey,而不是 publickeycipher 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9664443/

相关文章:

java - 在不同的线程中启动一个 Java 类

java - Android:带有进度对话框的繁重数据库操作

.net-core - 带有私钥的证书.Net Core

.net - 远程桌面设置看不到导入的证书

java - 我如何在mysql中使用默认值存储日期和时间

java - 使用 Eclipse : JavaCC 导入项目时出错

java-me - j2me从记录存储中删除记录

java - 我应该如何处理J2ME中的关键事件?

blackberry - "The type is not generic, it cannot be be parameterized with arguments"

Java 安全 - 使用公钥的 X509 证书验证