Java 基于 Des 对称加密算法实现的加密与解密功能详解
简介
在网络传输中,信息加密是很重要的一环节。对称加密算法是其中的一种,其中 DES 是其中应用比较广泛的一种算法。在 Java 中,Des 对称加密算法同样得到了广泛的支持和应用。
本文主要讲解如何在 Java 中使用 Des 对称加密算法实现加密和解密功能。
实现步骤
生成密钥
首先,需要通过 Java 自带的 KeyGenerator
类生成密钥,代码如下:
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56);
SecretKey secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
上面的代码中,我们通过 getInstance
方法获取了 DES
算法的 KeyGenerator 对象,接着我们设置了密钥的长度为 56 位,通过 generateKey
方法生成了一个 SecretKey 对象,并通过 getEncoded
方法获取了密钥的字节数组。
加密
生成密钥之后,我们就可以对数据进行加密,代码如下:
byte[] data = "Hello, world!".getBytes();
SecretKey secretKey = new SecretKeySpec(keyBytes, "DES");
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] result = cipher.doFinal(data);
上述代码中,我们先是定义需要被加密的数据,然后通过 SecretKeySpec
类将密钥字节数组转换成 SecretKey
对象。接着,我们通过 Cipher
类获取了 DES 加密的 Cipher 对象,设置了这个对象的加密模式和填充方式,并通过 init
方法将 Cipher 对象与指定 SecretKey 对象建立联系。最后,我们通过 doFinal
方法将数据进行加密。
解密
解密的步骤与加密类似,如下所示:
byte[] encryptedData = result;
SecretKey secretKey = new SecretKeySpec(keyBytes, "DES");
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedData = cipher.doFinal(encryptedData);
System.out.println(new String(decryptedData));
同样地,我们需要通过 SecretKeySpec
类将密钥字节数组转换成 SecretKey
对象,获取相应的 Cipher 对象,并通过 init
方法建立联系。最后,我们通过 doFinal
方法将数据进行解密,并将解密后的数据输出。
示例
示例一
以下是一个基于 Des 对称加密算法的加密和解密示例:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class DesEncryptionExample1 {
public static void main(String[] args) throws Exception {
// 生成密钥
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56);
SecretKey secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
// 加密
byte[] data = "Hello, world!".getBytes();
SecretKey secretKeySpec = new SecretKeySpec(keyBytes, "DES");
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] result = cipher.doFinal(data);
System.out.println("加密后的数据:" + new String(result));
// 解密
byte[] encryptedData = result;
Cipher cipher1 = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher1.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] decryptedData = cipher1.doFinal(encryptedData);
System.out.println("解密后的数据:" + new String(decryptedData));
}
}
示例二
以下是另一个基于 Des 对称加密算法的加密和解密示例:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class DesEncryptionExample2 {
public static void main(String[] args) throws Exception {
// 生成密钥
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56);
SecretKey secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
// 加密
byte[] data = "Java 实战圈".getBytes();
SecretKey secretKeySpec = new SecretKeySpec(keyBytes, "DES");
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] result = cipher.doFinal(data);
System.out.println("加密后的数据:" + new String(result));
// 解密
byte[] encryptedData = result;
Cipher cipher1 = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher1.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] decryptedData = cipher1.doFinal(encryptedData);
System.out.println("解密后的数据:" + new String(decryptedData));
}
}
总结
Java 中基于 DES 对称加密算法实现的加密和解密功能相对比较简单,只需按照上述步骤进行即可。另外,需要注意的是在生成密钥时需要指定密钥的长度,通常为 56 位。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java基于Des对称加密算法实现的加密与解密功能详解 - Python技术站