我使用javamail-crypto-bouncycastle-smime
库进行电子邮件数字签名和加密。
我已经检查了一些来自Internet的电子邮件加密示例,它们总是使用存储在密钥库中的公钥。但我需要使用存储在收件人证书中的公钥。
我知道如何从X.509证书获取公钥。
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
FileInputStream fis = new FileInputStream(new File("certFile.cer")));
Certificate cert = cert = certFactory.generateCertificate(fis);
Key pKey = cert.getPublicKey();
我有一个javamail-crypto-bouncycastle-smime
加密eamil消息的示例代码。
EncryptionUtils smimeUtils = EncryptionManager.getEncryptionUtils(EncryptionManager.SMIME);
char[] smimePw = new String(_smimePw).toCharArray();
EncryptionKeyManager smimeKeyMgr = smimeUtils.createKeyManager();
smimeKeyMgr.loadPublicKeystore(new FileInputStream(_filepk12), smimePw);
Key smimeKey = smimeKeyMgr.getPublicKey(_alias);
MimeMessage smimeEncryptedMsg = smimeUtils.encryptMessage(session, message, smimeKey);
问题是示例代码使用pk12公钥,但我所拥有的是不需要密码的X.509公钥。
如何通过收件人的X.509证书加密电子邮件?