JAVA DES加解密工具类
程序员文章站
2024-03-14 14:47:16
...
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.security.Key;
import java.util.Base64;
public class DESUtil {
//偏移变量,固定占8位字节
private final static String IV_PARAMETER = "12345678";
//**算法
private static final String ALGORITHM = "DES";
//加密/解密算法-工作模式-填充模式
private static final String CIPHER_ALGORITHM = "DES/CBC/PKCS5Padding";
//默认编码
private static final String CHARSET = "utf-8";
//密码
private static final String PASSWORD = "12345678";
//创建**是很耗时的,所以使用一个默认的**器就行了
private static final Key key = generateKey(PASSWORD);
/**
* 生成加密的key
*
* @param password 密码
*/
private static Key generateKey(String password) {
try {
DESKeySpec dks = new DESKeySpec(password.getBytes(CHARSET));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
return keyFactory.generateSecret(dks);
} catch (Exception ex) {
return null;
}
}
/**
* DES加密字符串
*
* @param data 待加密字符串
* @return 加密后内容
*/
public static String encrypt(String data) {
if (data == null)
return null;
try {
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
byte[] bytes = cipher.doFinal(data.getBytes(CHARSET));
return new String(Base64.getEncoder().encode(bytes));
} catch (Exception e) {
return data;
}
}
/**
* DES解密字符串
*
* @param data 待解密字符串
* @return 解密后内容
*/
public static String decrypt(String data) {
if (data == null)
return null;
try {
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));
cipher.init(Cipher.DECRYPT_MODE, key, iv);
return new String(cipher.doFinal(Base64.getDecoder().decode(data.getBytes(CHARSET))), CHARSET);
} catch (Exception e) {
return data;
}
}
}