我正在使用 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
。但是,我得到了 ECPublicKeyParameters
,setPublicKey
方法不接受它。
因此,我的要求是从 AsymmetricCipherKeyPair
中获取一个 PublicKey
。
最佳答案
最简单的方法是使用 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 获取 PublicKey,而不是 publickeycipher 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9664443/