[英]Sending an encrypted mail with javamail using PGP
I've an error when i try to encrypt a mail using PGP当我尝试使用 PGP 加密邮件时出现错误
The error:错误:
**java.security.NoSuchProviderException: No provider configured for PGP**
at net.suberic.crypto.EncryptionManager.getEncryptionUtils(EncryptionManager.java:106)
at tools.Encryption.encrypt(Encryption.java:29)
at core.mails.HtmlSeriesUploadingMail.sendMail(HtmlSeriesUploadingMail.java:93)
at core.services.MailService.run(MailService.java:71)
at java.lang.Thread.run(Unknown Source)
I saw that i need some library in my classpath so here is my classpath:我看到我的类路径中需要一些库,所以这是我的类路径:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="lib" path="lib/mail.jar"/>
<classpathentry kind="lib" path="lib/wrapper.jar"/>
<classpathentry kind="lib" path="lib/mysql.jar"/>
<classpathentry kind="lib" path="lib/pd4ml.jar"/>
<classpathentry kind="lib" path="lib/ini4j-0.5.1.jar"/>
<classpathentry kind="lib" path="lib/jdom-2.0.4.jar"/>
<classpathentry kind="lib" path="lib/bcmail-jdk14-139.jar"/>
<classpathentry kind="lib" path="lib/bcprov-jdk14-139.jar"/>
<classpathentry kind="lib" path="lib/javamail-crypto_060622.jar"/>
<classpathentry kind="lib" path="lib/javamail-crypto-bouncycastle-smime.jar"/>
<classpathentry kind="lib" path="lib/ss_css2.jar"/>
<classpathentry kind="lib" path="lib/certpath-api-compat.jar"/>
<classpathentry kind="lib" path="lib/cryptix-message-api.jar"/>
<classpathentry kind="lib" path="lib/cryptix-openpgp-provider.jar"/>
<classpathentry kind="lib" path="lib/cryptix-pki-api.jar"/>
<classpathentry kind="lib" path="lib/cryptix-jce-provider-2.1.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
And here's my code to encrypt:这是我要加密的代码:
public MimeMessage encrypt(Session session, MimeMessage mimeMessage, InternetAddress recipient) throws Exception {
// get the PGP EncryptionUtilities
EncryptionUtils pgpUtils = EncryptionManager.getEncryptionUtils(EncryptionManager.PGP);
// load the PGP keystore from the given file.
EncryptionKeyManager pgpKeyMgr = pgpUtils.createKeyManager();
pgpKeyMgr.loadPublicKeystore(new FileInputStream(new File(SystemData.getWatchDogConfig() + "test.asc")), null);
// get the PGP public key for encryption
java.security.Key pgpKey = pgpKeyMgr.getPublicKey((String) pgpKeyMgr.publicKeyAliases().iterator().next());
// encrypt the message
return pgpUtils.encryptMessage(session, mimeMessage, pgpKey);
}
I don't know what i should do... I begin with javamail and bouncycastle.我不知道我应该做什么...我从 javamail 和 bouncycastle 开始。
The exception NoSuchProviderException
is thrown by EncryptionManager
when it cannot find the provider specified in getEncryptionUtils
.当
EncryptionManager
找不到getEncryptionUtils
指定的提供者时,它会抛出异常NoSuchProviderException
。 The providers are loaded statically in EncryptionManager
class by retrieving them from the file META-INF/javamail-crypto.providers
.通过从文件
META-INF/javamail-crypto.providers
检索提供程序,在EncryptionManager
类中静态加载提供程序。 So, in order for EncryptionManager
to load PGP provider you will have to add a javamail-crypto.providers
file into your META-INF
folder with the following line:因此,为了让
EncryptionManager
加载 PGP 提供程序,您必须使用以下行将javamail-crypto.providers
文件添加到您的META-INF
文件夹中:
protocol=PGP;class=net.suberic.crypto.PGPEncryptionUtils
看一下此链接,它显示了如何使用Bouncycastle进行PGP加密: http ://fastpicket.com/blog/2012/05/14/easy-pgp-in-java-bouncy-castle
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.