📄 sendsignedandencryptedmail.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 + -