package com.huateng.encryption;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class Encryption {
private static final String Algorithm = "DESede"; // 定义 加密算法,可用
// DES,DESede,Blowfish
// keybyte为加密密钥,长度为24字节
// src为被加密的数据缓冲区(源)
private static byte[] encryptMode(byte[] keybyte, byte[] src) {
try {
// 生成密钥
SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
// 加密
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.ENCRYPT_MODE, deskey);
return c1.doFinal(src);
// 加密成功后返回
} catch (java.security.NoSuchAlgorithmException e1) {
e1.printStackTrace();
} catch (javax.crypto.NoSuchPaddingException e2) {
e2.printStackTrace();
} catch (java.lang.Exception e3) {
e3.printStackTrace();
}
return null;
// 失败返回null
}
// keybyte为加密密钥,长度为24字节
// src为加密后的缓冲区
private static byte[] decryptMode(byte[] keybyte, byte[] src) {
try {
// 生成密钥
SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
// 解密
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.DECRYPT_MODE, deskey);
return c1.doFinal(src);
} catch (java.security.NoSuchAlgorithmException e1) {
e1.printStackTrace();
} catch (javax.crypto.NoSuchPaddingException e2) {
e2.printStackTrace();
} catch (java.lang.Exception e3) {
e3.printStackTrace();
}
return null;
}
// 转换成十六进制字符串
private static String byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1)
hs = hs + "0" + stmp;
else
hs = hs + stmp;
//if (n < b.length - 1)
//hs = hs + ":";
}
return hs.toUpperCase();
}
// 16进制表示的字符串转换成字节数组
private static byte[] hex2byte( String s ) throws Exception {
char c,c1;
int x;
if( s.length() %2 != 0 )
throw new Exception( "密钥格式不正确" );
byte [] ret=new byte[s.length()/2];
for( int i=0;i<s.length();i++ ){
c=s.charAt(i);c1=s.charAt(++i);
if( !(c>='0' && c<='9' || c>='A' && c<='F' || c>='a' && c<='f' ))
throw new Exception( "密钥格式不正确" );
if( !(c1>='0' && c1<='9' || c1>='A' && c1<='F' || c1>='a' && c1<='f' ))
throw new Exception( "密钥格式不正确" );
x = Integer.decode( "0x"+c+c1 ).intValue();
if( x>127 ){
ret[i/2]=(byte)(x|0xffffff00);
}else{
ret[i/2]=(byte)(x);
}
}
return ret;
}
public static String encrypt(String src) throws Exception{
try{
byte[] encoded = encryptMode(hex2byte(EncrypCons.DESEDEKEY), src.getBytes());
return byte2hex(encoded);
}catch(Exception ex){
throw new Exception(ex.getMessage());
}
}
public static String decrypt(String src) throws Exception {
try{
byte[] srcByte = hex2byte(src);
byte[] decoded = decryptMode(hex2byte(EncrypCons.DESEDEKEY), srcByte);
return new String(decoded);
}catch(Exception ex){
throw new Exception(ex.getMessage());
}
}
public static void main(String[] args)
{
// // 添加新安全算法,如果用JCE就要把它添加进去
// Security.addProvider(new com.sun.crypto.provider.SunJCE());
//
//
// // 24字节的密钥
//
// final byte[] keyBytes = EncrypCons.DESEDEKEY.getBytes();
//
// String szSrc = "This is a 3DES test. 测试";
//
// System.out.println("加密前的字符串:" + szSrc);
//
// byte[] encoded = encryptMode(keyBytes, szSrc.getBytes());
//
// System.out.println("加密后的字符串:" + new String(encoded));
//
// byte[] srcBytes = decryptMode(keyBytes, encoded);
//
// System.out.println("解密后的字符串:" + (new String(srcBytes)));
try{
String szSrc = "11";
System.out.println("加密前的字符串:" + szSrc);
String encoded = encrypt(szSrc);
System.out.println("加密后的字符串:" + encoded);
System.out.println("长度:" + encoded.length());
String decoded = decrypt("27460C2B977058A3");
System.out.println("解密后的字符串:" + (decoded));
System.out.println("");
// Calendar now = Calendar.getInstance();
// int year =now.get(Calendar.YEAR);
// int month = now.get(Calendar.MONTH)+1;
// int day = now.get(Calendar.DAY_OF_MONTH)+1;
//
// String sYear = String.valueOf(year);
//
// String sMonth = String.valueOf(month);
// if (month < 10 )
// sMonth = "0"+sMonth;
// String sDay = String.valueOf(day);
// if (day < 10)
// sDay = "0" + sDay;
// if(day > 31){
// sDay = "01";
// if(month > 12){sMonth = "01"; year = year +1;}
// }
//
// System.out.println(sYear+sMonth+sDay);
}catch(Exception ex){
}
}
}
此算法是jdk内部自带的一个算法,希望能给大定一些小启示!!!