package com.neusoft.avnc.lbs.common.tools; /* *北京联通全网有关网上订购和点播接口URL加密算法 * *采用3DES加密, ECB模式/使用PKCS7方式填充不足位, *目前给的密钥是192位(24个字节)经过BASE64编码后的可见字符串 * *作者:xuchean@gmail.com */ import java.net.URLEncoder; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import org.bouncycastle.jce.provider.BouncyCastleProvider; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /* * 配置: 从http://www.bouncycastle.org/latest_releases.html上下载对应JDK的“Provider”, * 如JDK1.6对应bcprov-jdk16-137.jar, 放入CLASSPATH即可. */ public class ThreeDes { private static Cipher cipher = null; private static BASE64Encoder base64Encoder = new BASE64Encoder(); private static BASE64Decoder base64Decode = new BASE64Decoder(); public static final String ALGORITHM = "DESede/ECB/PKCS7Padding"; private synchronized static Cipher initCipher(int mode, String key) { try { // 添加新安全算法:PKCS7 Security.addProvider(new BouncyCastleProvider()); SecretKey desKey = new SecretKeySpec((new BASE64Decoder()).decodeBuffer(key), ALGORITHM); Cipher tcipher = Cipher.getInstance(ALGORITHM); tcipher.init(mode, desKey); return tcipher; } catch (Exception e) { e.printStackTrace(); return null; } } public synchronized static String encrypt(String src, String charset, String key) { try { return URLEncoder.encode(encrypt(src, key), charset); } catch (Exception e) { e.printStackTrace(); return null; } } public synchronized static String encrypt(String src, String key) { return base64Encoder.encode(encrypt(src.getBytes(), key)); } public synchronized static byte[] encrypt(byte[] src, String key) { try { cipher = initCipher(Cipher.ENCRYPT_MODE, key); return cipher.doFinal(src); } catch (Exception e) { e.printStackTrace(); return null; } } public synchronized static String decrypt(String src, String charset, String key) { try { return URLEncoder.encode(decrypt(src, key), charset); } catch (Exception e) { e.printStackTrace(); return null; } } public synchronized static String decrypt(String src, String key) { try { return new String(decrypt(base64Decode.decodeBuffer(src), key), "ASCII"); } catch (Exception e) { e.printStackTrace(); return null; } } public synchronized static byte[] decrypt(byte[] src, String key) { try { cipher = initCipher(Cipher.DECRYPT_MODE, key); return cipher.doFinal(src); } catch (Exception e) { e.printStackTrace(); return null; } } public static void main (String args[]) { String s1 = ""; String s2 = ""; String s3 = ""; String key = "27jrWz2sxrVbR+pnyg6jWHhgNk4sZo46"; long start = System.currentTimeMillis(); long start1; long end; long end1; s3 = "000000000000000120110220131522"; //UUID.randomUUID().toString();//String.valueOf(Math.random()); s1 = ThreeDes.encrypt(s3, key); end = System.currentTimeMillis(); start1 = System.currentTimeMillis(); s2 = ThreeDes.decrypt("1mPMNAhtTA+pLhQIk5mi7j+o8UcYj1SmKUzl6KhbxKQ=", key); end1 = System.currentTimeMillis(); System.out.println("明文字符串:" + s3); System.out.println("密文字符串:" + s1); System.out.println("解密字符串:" + s2); System.out.println("加密执行时间:" + String.valueOf(end - start) + "毫秒"); System.out.println("解密执行时间:" + String.valueOf(end1 - start1) + "毫秒"); System.out.println("=================================================================="); } }