DES(Data Encryption Standard)算法的加密和解密功能。代码使用了Java加密扩展(Java Cryptography Extension,JCE)中的Cipher类来进行加密和解密操作,同时用DESKeySpec和SecretKeyFactory来生成密钥。
这个类包含了两个公开方法:encrypt用于加密数据,decrypt用于解密数据。加密后的数据使用了Base64编码来确保输出结果为可打印的ASCII字符
Java代码实现:
package com.common.util;
import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import java.util.Base64;
public class DesUtils { private static final String DES ="DES";
/**
* DES加密
* @param data 待加密数据
* @param key 密钥
* @return 加密后的数据,使用Base64编码
*/
public static String encrypt(String data,String key){
try {
//根据密钥生成密钥规范
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());
//根据密钥规范生成密钥工厂
SecretKeyFactory instance = SecretKeyFactory.getInstance(DES);
//根据密钥工厂和密钥规范生成密钥
SecretKey secretKey = instance.generateSecret(desKeySpec);
//根据加密算法获取加密器
Cipher cipher = Cipher.getInstance(DES);
//初始化加密器,设置加密模式和密钥
cipher.init(Cipher.ENCRYPT_MODE,secretKey);
//加密数据
byte[] bytes = cipher.doFinal(data.getBytes());
//对加密后的数据进行Base64编码
return Base64.getEncoder().encodeToString(bytes);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* DES解密
* @param encryptData 加密后的数据,使用Base64编码
* @param key 密钥
* @return 解密后的数据
*/
public static String decrypt(String encryptData,String key) {
try {
//根据密钥生成密钥规范
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());
//根据密钥规范生成密钥工厂
SecretKeyFactory instance = SecretKeyFactory.getInstance(DES);
//根据密钥工厂和密钥规范生成密钥
SecretKey secretKey = instance.generateSecret(desKeySpec);
//对加密后的数据进行Base64解码
byte[] decode = Base64.getDecoder().decode(encryptData);
//根据加密算法获取加密器
Cipher cipher = Cipher.getInstance(DES);
//初始化解密器,设置解密模式和密钥
cipher.init(Cipher.DECRYPT_MODE,secretKey);
//解密数据
byte[] bytes = cipher.doFinal(decode);
//将解密后的数据转换为字符串
return new String(bytes);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
String data ="你好!!";
String key ="12345eeertyyewww678";
String encrypt = encrypt(data, key);
System.out.println(encrypt);
String decrypt = decrypt(encrypt, key);
System.out.println(decrypt);
}
}
DES的算法速度较快,但是在安全性上面并不是最优选择,因为DES算法的密钥长度比较短,被暴力破解和差分攻击的风险比较高,一般推荐用一些更安全的对称加密算法,比如3DES、AES。