packagecom.test;importjava.io.IOException;importjava.security.SecureRandom;importjavax.crypto.Cipher;importjavax.crypto.SecretKey;importjavax.crypto.SecretKeyFactory;importjavax.crypto.spec.DESKeySpec;importsun.misc.BASE64Decoder;importsun.misc.BASE64Encoder;public classCryptoUtilTest {private final static String DES = "DES";private final static String ENCODE = "GBK";/*** Description 根据键值进行加密
*@paramdata 待加密数据
*@paramkey 密钥
*@return*@throwsException*/
public static String encrypt(String data, String key) throwsException {byte[] bt =encrypt(data.getBytes(ENCODE), key.getBytes(ENCODE));
String strs= newBASE64Encoder().encode(bt);returnstrs;
}/*** 根据键值进行解密
*@paramdata 待解密数据
*@paramkey 密钥
*@return*@throwsIOException
*@throwsException*/
public static String decrypt(String data, String key) throwsIOException,Exception {if (data == null)return null;
BASE64Decoder decoder= newBASE64Decoder();byte[] buf =decoder.decodeBuffer(data);byte[] bt =decrypt(buf, key.getBytes(ENCODE));return newString(bt, ENCODE);
}/*** Description 根据键值进行加密
*
*@paramdata
*@paramkey
* 加密键byte数组
*@return*@throwsException*/
private static byte[] encrypt(byte[] data, byte[] key) throwsException {//生成一个可信任的随机数源
SecureRandom sr = newSecureRandom();//从原始密钥数据创建DESKeySpec对象
DESKeySpec dks = newDESKeySpec(key);//创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
SecretKeyFactory keyFactory =SecretKeyFactory.getInstance(DES);
SecretKey securekey=keyFactory.generateSecret(dks);//Cipher对象实际完成加密操作
Cipher cipher =Cipher.getInstance(DES);//用密钥初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);returncipher.doFinal(data);
}/*** Description 根据键值进行解密
*
*@paramdata
*@paramkey 加密键byte数组
*@return*@throwsException*/
private static byte[] decrypt(byte[] data, byte[] key) throwsException {//生成一个可信任的随机数源
SecureRandom sr = newSecureRandom();//从原始密钥数据创建DESKeySpec对象
DESKeySpec dks = newDESKeySpec(key);//创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
SecretKeyFactory keyFactory =SecretKeyFactory.getInstance(DES);
SecretKey securekey=keyFactory.generateSecret(dks);//Cipher对象实际完成解密操作
Cipher cipher =Cipher.getInstance(DES);//用密钥初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, securekey, sr);returncipher.doFinal(data);
}public static voidmain(String[] args){
String data= "12AU@_@is(m)8;1:'0js:\"]\"qASI08";
String key="qwerrewq"; //秘钥
System.out.println("加密前===>"+data);try{
String jiami=encrypt(data, key);
System.err.println("加密后:"+jiami );
String jiemi=decrypt(jiami, key);
System.err.println("解密后:"+jiemi);
}catch(Exception e) {
System.out.println("秘钥不正确"+"或"+"加密后的码被更改");
e.printStackTrace();
}
}
}