DES代码讲解
程序员文章站
2024-03-14 14:55:22
...
public class DESDemo {
/*
* DES加密介绍
DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同**的算法。DES加密算法出自IBM的研究,
后来被美国*正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位**,以现代计算能力,
24小时内即可被**。虽然如此,在某些简单应用中,我们还是可以使用DES加密算法,本文简单讲解DES的JAVA实现
。
注意:DES加密和解密过程中,大于等于8位
*/
public static void main(String[] args) throws Exception {
// 明文
String str = "hello des";
// 密码
String password = "12345678"; //大于等于8位
String desc = DESUlits.doWork(str, password,0);
System.out.println("密文:" + desc);
// 解密
str = DESUlits.doWork(desc, password,1);
System.out.println("明文:" +str);
}
}
加密和解密的工具类
public class DESUlits {
/**
* 加密解密接口
* @param data 数据
* @param password 加密解密密码 必须8位字节
* @param flag 加密解密标志 0:加密 ,1:解密
* @return
*/
public static String doWork(String data, String password,int flag) {
try {
//1.DES算法要求有一个可信任的随机数源
SecureRandom random = new SecureRandom();
//2.创建一个DESKeySpec对象
DESKeySpec desKey = new DESKeySpec(password.getBytes());
//3.创建一个密匙工厂
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
//4.将DESKeySpec对象转换成SecretKey对象
SecretKey securekey = keyFactory.generateSecret(desKey);
//5.Cipher对象实际完成加密/解密操作
Cipher cipher = Cipher.getInstance("DES");
//加密
if(flag == 0){
//创建一个BASE64Encoder对象进行加密
sun.misc.BASE64Encoder base64encoder = new sun.misc.BASE64Encoder();
//用密匙初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, securekey, random);
//进行加密操作
return base64encoder.encode(cipher.doFinal(data.getBytes("UTF-8")));
}else{
//解密
////创建一个BASE64Decoder对象进行解密
sun.misc.BASE64Decoder base64decoder = new sun.misc.BASE64Decoder();
byte[] encodeByte = base64decoder.decodeBuffer(data);
//用密匙初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, securekey, random);
//执行解密操作
byte[] decoder = cipher.doFinal(encodeByte);
return new String(decoder,"UTF-8");
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}