Java实现常用加密算法 —— DES
·
系列文章目录
目录
前言
DES(Data Encryption Standard)的主要作用是提供数据的加密保护,确保数据在传输和存储过程中的安全性。 通过使用相同的密钥进行加密和解密,DES确保只有持有密钥的双方能够理解和访问数据内容,从而防止未经授权的访问和篡改。本篇主要介绍DES算法在Java(JDK1.8)中如何实现,借助Java标准库或第三方库,非原始实现,较为基础。
一、DES是什么?
DES算法是一种对称加密算法,其加密和解密使用相同的密钥。 DES算法由IBM公司在1972年研制,是美国数据加密标准算法。DES算法的基本原理是对称加密,即加密和解密使用相同的密钥。
—— 百度AI
二、实现步骤
1、加密
代码如下(示例):
public class EncryptUtils {
/**
* DES,Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。
* <p>
* 输入:待加密的字符串,8位字符串密码
* 输出:16进制字符串或Base64编码的字符串密文(常用)
* 应用:密码管理、数字签名、文件完整性校验
* 安全性:★★★☆☆
*
* @param plainString 明文
* @param key 秘钥
* @return cipherString 密文
*/
public static String desEncrypt(String plainString, String key) {
String cipherString = null;
try {
// 指定算法
String algorithm = "DES";
// 创建密钥规范
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), algorithm);
// 获取Cipher对象实例(Java8中DES默认使用ECB模式和PKCS5Padding填充方式,因此下列模式和填充方式无需指定)
Cipher cipher = Cipher.getInstance(algorithm + "/ECB/PKCS5Padding");
// 初始化Cipher为加密模式
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
// 获取加密byte数组
byte[] cipherBytes = cipher.doFinal(plainString.getBytes(StandardCharsets.UTF_8));
// 输出为Base64编码
cipherString = Base64.getEncoder().encodeToString(cipherBytes);
} catch (Exception e) {
e.printStackTrace();
}
return cipherString;
}
}
2、解密
代码如下(示例):
public class EncryptUtils {
/**
* DES,Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。
* <p>
* 输入:密文,8位字符串密码
* 输出:明文字符串
* 应用:密码管理、数字签名、文件完整性校验
* 安全性:★★★☆☆
*
* @param cipherString 密文
* @param key 秘钥
* @return plainString 明文
*/
public static String desDecrypt(String cipherString, String key) {
String plainString = null;
try {
// 指定算法
String algorithm = "DES";
// 创建密钥规范
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), algorithm);
// 获取Cipher对象实例(Java8中DES默认使用ECB模式和PKCS5Padding填充方式,因此下列模式和填充方式无需指定)
Cipher cipher = Cipher.getInstance(algorithm + "/ECB/PKCS5Padding");
// 初始化Cipher为解密模式
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
// 获取加密byte数组
byte[] cipherBytes = cipher.doFinal(Base64.getDecoder().decode(cipherString));
// 输出为字符串
plainString = new String(cipherBytes);
} catch (Exception e) {
e.printStackTrace();
}
return plainString;
}
}
三、测试
代码如下(示例):
public class EncryptUtils {
...
public static void main(String[] args) {
String plainString = "hello world, hello java!";
String desEncrypt = desEncrypt(plainString, "12345678");
String desDecrypt = desDecrypt(desEncrypt, "12345678");
System.out.println("--------------------------- des");
System.out.println("加密前: " + plainString);
System.out.println("加密后: " + desEncrypt);
System.out.println("解密后: " + desDecrypt);
}
}
运行截图

某网站运行截图

总结
以上就是今天要讲的内容,本文仅仅简单介绍了DES加密算法在Java中的实现方式,各个加密算法的对比及总结请见本文系列文章汇总篇,水平有限,难免出错,仅供参考,不喜勿喷,感谢!更多内容请百度和ChatGPT!
更多推荐

所有评论(0)