邮件签名

https://github.com/jhawthorn/dkim/tree/master/lib/dkim


获取
private.pem


DKIM Private and Public Key

DKIM is a popular way to sign email. Here is a way to generate private and public keys for enabling DKIM on a domain.

1. Generate Private Key (in PEM format) 
   openssl genrsa -out private.pem 786
2. Generate Public Key 
   openssl rsa -pubout -in private.pem | sed /^-----/d | tr -d '\n'
3. Put the following in DNS record
   <selector>._domainkey IN TXT v=DKIM1;h=sha256;k=rsa;s=*;t=s;p=<publicKey>

If you are using Java to send email, consider using DKIM-JavaMail for signing email. Convert the private key to PKCS8 format and then Base64 encode it using the following

openssl pkcs8 -topk8 -inform PEM -outform DER -in private.pem -nocrypt | base64 -w 0

Here is the code snippet to sign email

String dkimPrivateKey = // Base64 encoded private key in PKCS8 format
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
byte[] privateKeyPKCS8 = Base64.decodeBase64(dkimPrivateKey);
PKCS8EncodedKeySpec privateSpec = new PKCS8EncodedKeySpec(privateKeyPKCS8);
RSAPrivateKey privateKey = (RSAPrivateKey) keyFactory.generatePrivate(privateSpec);
DKIMSigner dkimSigner = new DKIMSigner(<signingDomain>, <selector>, privateKey);
在Java中实现邮件签名可以通过JavaMail API来实现。下面是一个简单的示例代码: ```java import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.Signature; import java.util.Properties; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class EmailSigner { public static void main(String[] args) throws Exception { String host = "<SMTP服务器地址>"; String to = "<接收方邮件地址>"; String from = "<发送方邮件地址>"; String subject = "<邮件主题>"; String text = "<邮件正文>"; // 生成密钥对 KeyPairGenerator keygen = KeyPairGenerator.getInstance("DSA"); keygen.initialize(512); KeyPair keypair = keygen.generateKeyPair(); PrivateKey privateKey = keypair.getPrivate(); // 对邮件正文进行签名 Signature sig = Signature.getInstance("SHA1withDSA"); sig.initSign(privateKey); sig.update(text.getBytes()); byte[] signature = sig.sign(); // 配置邮件会话 Properties props = new Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.host", host); props.put("mail.smtp.port", "25"); Session session = Session.getDefaultInstance(props, null); MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject(subject); message.setText(text); message.setHeader("X-Mailer", "JavaMailer"); message.saveChanges(); // 将签名添加到邮件头部 message.setHeader("Signature", new String(signature)); // 发送邮件 Transport transport = session.getTransport("smtp"); transport.connect(host, "<SMTP用户名>", "<SMTP密码>"); transport.sendMessage(message, message.getAllRecipients()); transport.close(); } } ``` 在上面的代码中,我们使用DSA算法生成了一个512位的密钥对,然后使用SHA1withDSA算法对邮件正文进行签名,并将签名添加到邮件头部。最后通过JavaMail API发送邮件。需要注意的是,发送邮件时需要提供SMTP服务器地址、用户名和密码等信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值