package com.siro.tools;import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;public class AESPlus {public static String encrypt(String strKey, String strIn) throws Exception {SecretKeySpec skeySpec = getKey(strKey);Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);byte[] encrypted = cipher.doFinal(strIn.getBytes());return new BASE64Encoder().encode(encrypted);}public static String decrypt(String strKey, String strIn) throws Exception {SecretKeySpec skeySpec = getKey(strKey);Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);byte[] encrypted1 = new BASE64Decoder().decodeBuffer(strIn);byte[] original = cipher.doFinal(encrypted1);String originalString = new String(original);return originalString;}private static SecretKeySpec getKey(String strKey) throws Exception {byte[] arrBTmp = strKey.getBytes();byte[] arrB = new byte[16]; // 创建一个空的16位字节数组(默认值为0)for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {arrB[i] = arrBTmp[i];}SecretKeySpec skeySpec = new SecretKeySpec(arrB, "AES");return skeySpec;}public static void main(String[] args) throws Exception {String Code = "中文ABc123";String key = "1q2w3e4r";String codE;codE = AESPlus.encrypt(key, Code);System.out.println("原文:" + Code);System.out.println("密钥:" + key);System.out.println("密文:" + codE);System.out.println("解密:" + AESPlus.decrypt(key, codE));}}
package com.siro.tools;import java.security.*;import javax.crypto.*;public class DESPlus {public static String encrypt(String strKey, String strIn) throws Exception {Security.addProvider(new com.sun.crypto.provider.SunJCE());Key key = getKey(strKey);Cipher encryptCipher = Cipher.getInstance("DES");encryptCipher.init(Cipher.ENCRYPT_MODE, key);return byteArr2HexStr(encryptCipher.doFinal((strIn.getBytes())));}public static String decrypt(String strKey, String strIn) throws Exception {Security.addProvider(new com.sun.crypto.provider.SunJCE());Key key = getKey(strKey);Cipher decryptCipher = Cipher.getInstance("DES");decryptCipher.init(Cipher.DECRYPT_MODE, key);return new String(decryptCipher.doFinal((hexStr2ByteArr(strIn))));}private static Key getKey(String strKey) throws Exception {byte[] arrBTmp = strKey.getBytes(); //获取字节流byte[] arrB = new byte[8]; //创建一个空的8位字节数组(默认值为0)//将原始字节数组转换为8位for(int i = 0; i < arrBTmp.length && i < arrB.length; i++) {arrB[i] = arrBTmp[i];}// 生成密钥Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES");return key;}private static String byteArr2HexStr(byte[] arrB) throws Exception {int iLen = arrB.length;// 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍StringBuffer sb = new StringBuffer(iLen * 2);for (int i = 0; i < iLen; i++) {int intTmp = arrB[i];// 把负数转换为正数while (intTmp < 0) {intTmp = intTmp + 256;}// 小于0F的数需要在前面补0if (intTmp < 16) {sb.append("0");}sb.append(Integer.toString(intTmp, 16));}return sb.toString();}private static byte[] hexStr2ByteArr(String strIn) throws Exception {byte[] arrB = strIn.getBytes();int iLen = arrB.length;// 两个字符表示一个字节,所以字节数组长度是字符串长度除以2byte[] arrOut = new byte[iLen / 2];for (int i = 0; i < iLen; i = i + 2) {String strTmp = new String(arrB, i, 2);arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);}return arrOut;}public static void main(String[] args) {try {String Code = "中B123";String key = "1q2w3e4r";String codE;codE = DESPlus.encrypt(key, Code);System.out.println("加密前的字串:" + Code);System.out.println("加密所用密钥:" + key);System.out.println("加密后的字串:" + codE);System.out.println("解密后的字串:" + DESPlus.decrypt(key, codE));} catch (Exception e) {e.printStackTrace();}}}
1.打开要重新发送的邮件。打开的意思就是双击在新窗口中显示。
2.在菜单中的“其他动作”下拉,选择“重新发送该邮件”。
3.会提示“您似乎不是该邮件的原始发送人,是否要重发?”
是同一帐号就应该没有问题。
创建图表的时候,会调用 ChartFactory 工厂类,工厂类里的创建函数的内部,会创建 JFreeChart 对象,如下:
JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, legend);