⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sendsignedandencryptedmail.java

📁 用java实现的对电子邮件进行加密解密及签名的算法接口
💻 JAVA
字号:
package cn.edu.scut.smimeapi;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: </p>
 *
 * @author lyh
 * @version 1.0
 */
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.Security;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;

import javax.mail.internet.MimeMessage;
import javax.activation.MailcapCommandMap;
import javax.activation.CommandMap;

import org.bouncycastle.mail.smime.SMIMEException;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import java.util.Enumeration;
import cn.edu.scut.certmgr.TokenPrivateKey;
import cn.edu.scut.certmgr.ConfigFileItem;
import cn.edu.scut.certmgr.KeyStoreCertificates;
import cn.edu.scut.certmgr.ProviderConfiguration;
import java.security.Key;
import cn.edu.scut.certmgr.KeyStoreManager;


/**
 * sends a signed and encrypted mail message.
 */
public class SendSignedAndEncryptedMail extends SendMail
{

  static
  {
   MailcapCommandMap mailcap = (MailcapCommandMap) CommandMap.
          getDefaultCommandMap();

      mailcap.addMailcap("application/pkcs7-signature;; x-java-content-handler=org.bouncycastle.mail.smime.handlers.pkcs7_signature");
      mailcap.addMailcap("application/pkcs7-mime;; x-java-content-handler=org.bouncycastle.mail.smime.handlers.pkcs7_mime");
      mailcap.addMailcap("application/x-pkcs7-signature;; x-java-content-handler=org.bouncycastle.mail.smime.handlers.x_pkcs7_signature");
      mailcap.addMailcap("application/x-pkcs7-mime;; x-java-content-handler=org.bouncycastle.mail.smime.handlers.x_pkcs7_mime");
      mailcap.addMailcap("multipart/signed;; x-java-content-handler=org.bouncycastle.mail.smime.handlers.multipart_signed");

      CommandMap.setDefaultCommandMap(mailcap);


      /* Add BC */
    Security.addProvider(new BouncyCastleProvider());

  }

  public SendSignedAndEncryptedMail()
  {
    try {
      jbInit();
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }
  private void jbInit() throws Exception
  {

  }
  /**
       * Return a MimeMessage which has been Signed and encrypted by local keystore.
       *
       * @param Signedkey the PrivateKey which to be used to sign the message.
       * @param Signedcert the X509Certificate to be carried with the message.
       * @param Encryptedcert the X509Certificate which to be used to encrypt the message.
       * @param msg  the MimeMessage to be signed and encrypted.
       * @return the  MimeMessage which has been signed and encrypted by lockal keystore .
       * @throws Exception
     */
  public MimeMessage CreateSignedAndEncryptedMail(PrivateKey Signedkey,X509Certificate Signedcert,X509Certificate Encryptedcert,MimeMessage msg)
      throws Exception
  {

    SendSignedMail ssm=new SendSignedMail();
    MimeMessage signedmsg=ssm.CreateSignedMail(Signedkey,Signedcert,msg);

    SendEncryptedMail sem=new SendEncryptedMail();
    return sem.CreateEncrytedMail(Encryptedcert,signedmsg);

  }

  /**
        * Return a MimeMessage which has been Signed and encrypted by USB_Token.
        *
        * @param Signedkey the TokenPrivateKey which to be used to sign the message.
        * @param Signedcert the X509Certificate to be carried with the message.
        * @param Encryptedcert the X509Certificate which to be used to encrypt the message.
        * @param msg  the MimeMessage to be signed and encrypted.
        * @return the  MimeMessage which has been signed and encrypted by USB_Token .
        * @throws Exception
      */
   public MimeMessage CreateSignedAndEncryptedMailByToken(TokenPrivateKey Signedkey,X509Certificate Signedcert,X509Certificate Encryptedcert,MimeMessage msg)
       throws Exception
   {

     SendSignedMail ssm=new SendSignedMail();
     MimeMessage signedmsg=ssm.CreateSignedMailByToken(Signedkey,Signedcert,msg);

     SendEncryptedMail sem=new SendEncryptedMail();
     return sem.CreateEncrytedMail(Encryptedcert,signedmsg);

  }


/*
  public static void main(String args[]) throws Exception
  {
      try
         {
      SendSignedAndEncryptedMail ssem=new SendSignedAndEncryptedMail();
      ssem.setAccount("smtp.163.com","waitfor_mylove@163.com","198097");
      MimeMessage testmsg=ssem.CreateMail("waitfor_mylove@163.com","waitfor_mylove@163.com","test signed and encrypted mail","hello,i love you!");

      ProviderConfiguration pConfig = new ProviderConfiguration("Config.xml");

        //=============epass2000  keystore
        ConfigFileItem configItem = pConfig.getConfigItem(1);
        KeyStoreManager ksMgr = new KeyStoreManager(configItem, "1234".toCharArray());//密码

       //===================Local KeyStore
       // ConfigFileItem configItem = pConfig.getConfigItem(0);
       // KeyStoreManager ksMgr = new KeyStoreManager(configItem, "tanglab".toCharArray());//密码


        KeyStoreCertificates storeCerts = ksMgr.getAllCertificates();
        String Certalias=null;

       for(int i=0;i<storeCerts.itemCount();i++)
        {
          if(storeCerts.getCertItem(i).hasPrivateKey())
            {
                String alias = storeCerts.getCertItem(i).getAlias();
                Certalias = alias;
                X509Certificate cert = (X509Certificate)ksMgr.getCertificate(Certalias);
                System.out.println(cert.getSubjectX500Principal());
            }
        }


         Certificate cert = ksMgr.getCertificate(Certalias);

        //PrivateKey pkey=(PrivateKey)ksMgr.getKey(Certalias,"tanglab".toCharArray());
        //MimeMessage mmmmsg=ssem.CreateSignedAndEncryptedMail(pkey,(X509Certificate)cert,(X509Certificate)cert,testmsg);

        TokenPrivateKey TokenKey=ksMgr.getTokenKey(Certalias,null);

         MimeMessage mmmmsg=ssem.CreateSignedAndEncryptedMailByToken(TokenKey,(X509Certificate)cert,(X509Certificate)cert,testmsg);
         ssem.Send(mmmmsg);
         }
         catch (Exception ex)
         {
         System.err.println("发送签名与加密邮件发生异常:"+ex);
         }



    }
*/

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -