`

DES加密解密

    博客分类:
  • java
阅读更多
package queue;


import java.security.spec.AlgorithmParameterSpec;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

//DES加密解密
public class DESUtil {

public static void main(String[] args) {
try {
System.out.println(DESUtil.encrypt("wangwang", "huweiyi"));
System.out.println(DESUtil.decrypt("wangwang", "pbiWJ0+ZhUw="));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static byte[] getByte(int mode,String key , byte[] data) throws Exception {
// 创建一个 DESKeySpec 对象,使用 key 中的前 8 个字节作为 DES 密钥的密钥内容。
DESKeySpec desKey = new DESKeySpec(key.getBytes("utf-8"));
//返回转换指定算法的秘密密钥的 SecretKeyFactory 对象。
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
//根据提供的密钥规范(密钥材料)生成 SecretKey 对象。
SecretKey securekey = keyFactory.generateSecret(desKey);
// 使用 wangding 中的字节作为 wangding 来构造一个 IvParameterSpec 对象。
AlgorithmParameterSpec paramSpec = new IvParameterSpec("wangding".getBytes("utf-8"));
//返回实现指定转换的 Cipher 对象。
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
// 用密钥和一组算法参数初始化此 Cipher。
cipher.init(mode, securekey, paramSpec);
//按单部分操作加密或解密数据,或者结束一个多部分操作。
byte [] bt = cipher.doFinal(data);
return bt;
}

//加密方法
public static String encrypt(String key, String data) throws Exception {
String str = "";
byte[] bt = getByte(Cipher.ENCRYPT_MODE, key, data.getBytes());
if (bt != null) {
str = new BASE64Encoder().encode(bt);
}
return str;
}

//解密方法
public static String decrypt(String key, String data) throws Exception {
String str = "";
byte [] bt = getByte(Cipher.DECRYPT_MODE, key, new BASE64Decoder().decodeBuffer(data));
if (bt != null) {
str = new String(bt, "utf-8");
}
return str;
}

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics