packagecom.test.cms.des;importsun.misc.BASE64Decoder;importsun.misc.BASE64Encoder;import javax.crypto.*;importjavax.crypto.spec.DESKeySpec;importjava.io.IOException;importjava.security.SecureRandom;public classtest {private final static String DES = "DES";public static voidmain(String[] args) {//原文
String data = "yvioo";/*** 秘钥设置的长度必须大于等于8
* 但是如果大于8的话,只会取前8个字节作为秘钥*/String key= "wa1234535";//加密
System.err.println(encrypt(data, key));//解密
System.err.println(decrypt(encrypt(data, key), key));
}/*** 根据键值进行加密
*@paramdata
*@paramkey 加密键byte数组
*@return
*/
public staticString encrypt(String data, String key) {byte[] bt =encrypt(data.getBytes(), key.getBytes());
String strs= newBASE64Encoder().encode(bt);returnstrs;
}/*** 根据键值进行解密
*@paramdata
*@paramkey 加密键byte数组
*@return
*/
public staticString decrypt(String data, String key) {try{if (data == null)return null;
BASE64Decoder decoder= newBASE64Decoder();byte[] buf =decoder.decodeBuffer(data);byte[] bt =decrypt(buf, key.getBytes());return newString(bt);
}catch(IOException e) {
e.printStackTrace();
}return null;
}/***根据键值进行加密
*@paramdata
*@paramkey 加密键byte数组
*@return
*/
private static byte[] encrypt(byte[] data, byte[] key) {try{//生成一个可信任的随机数源
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);
}catch(Exception e) {
e.printStackTrace();
}return null;
}/*** 根据键值进行解密
*@paramdata
*@paramkey 加密键byte数组
*@return
*/
private static byte[] decrypt(byte[] data, byte[] key) {try{//生成一个可信任的随机数源
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);
}catch(Exception e) {
e.printStackTrace();
}return null;
}
}