2013-07-01 5 views
2

Я ошибку, когда я пытаюсь зашифровать почту с помощью PGPОтправка зашифрованной почты с использованием JavaMail PGP

Ошибка:

**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) 

Я видел, что я нужна библиотека в моем пути к классам, так вот мой путь к классам:

<?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> 

И вот мой код для шифрования:

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); 
    } 

Я не знаю, что я должен делать ... Я начинаю с javamail и bouncycastle.

ответ

0

Исключение NoSuchProviderException выбрасывается EncryptionManager, когда он не может найти поставщика, указанного в getEncryptionUtils. Поставщики загружаются статически в класс EncryptionManager, извлекая их из файла META-INF/javamail-crypto.providers. Таким образом, для того, чтобы EncryptionManager для загрузки поставщика PGP вы должны добавить javamail-crypto.providers файл в папку META-INF с помощью следующей строки:

protocol=PGP;class=net.suberic.crypto.PGPEncryptionUtils 
0

Посмотрите на эту ссылку, он показывает, как сделать шифрование PGP с использованием BouncyCastle: http://fastpicket.com/blog/2012/05/14/easy-pgp-in-java-bouncy-castle/

+0

Он по-прежнему не работает –

+0

@Olivier Wathieu: Не могли бы вы отправить код, который вы пробовал до сих пор и полный стек? –

+0

Я отредактировал мой вопрос. спасибо за помощь мне, между прочим;) –