簡體   English   中英

使用 PGP 使用 javamail 發送加密郵件

[英]Sending an encrypted mail with javamail using PGP

當我嘗試使用 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 開始。

EncryptionManager找不到getEncryptionUtils指定的提供者時,它會拋出異常NoSuchProviderException 通過從文件META-INF/javamail-crypto.providers檢索提供程序,在EncryptionManager類中靜態加載提供程序。 因此,為了讓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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM