Java 对称加密算法实现详解
什么是对称加密算法
对称加密算法是一种使用相同密钥进行加密和解密的加密方法。通俗的说,就是发送者和接收者用相同的“钥匙”来加密和解密邮件,数据或者文件。常见的对称加密算法有DES、AES、RC4等。
Java 中对称加密算法的实现
Java 支持对称加密算法有DES、AES、RC4等,这里以DES算法为例进行说明。
1. 密钥生成
在使用DES加密算法进行加解密之前,首先需要生成密钥。Java 提供了两种方式来生成密钥:随机生成密钥和用户自定义密钥。
1.1 随机生成密钥
对称加密算法中的密钥是一段随机字符串,Java 提供了 KeyGenerator 类用于生成随机密钥。下面是一个生成 DES 密钥的示例代码:
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
keyGen.init(56); // 选择长度为 56 的密钥
SecretKey key = keyGen.generateKey();
1.2 用户自定义密钥
用户也可以自己定义 DES 加密算法的密钥。下面是一个使用字符串作为 DES 密钥的示例代码:
String keyString="12345678";
DESKeySpec spec=new DESKeySpec(keyString.getBytes());
SecretKeyFactory factory=SecretKeyFactory.getInstance("DES");
SecretKey key=factory.generateSecret(spec);
2. 加密和解密
在生成好密钥后,我们就可以使用该密钥进行加密和解密了。Java 提供了 Cipher 类来实现对称加密算法的加解密操作,下面是一个使用 DES 算法对字符串进行加解密的示例代码:
// 加密
byte[] data = "hello, world!".getBytes("utf-8");
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key); // key 为上一步生成的密钥
byte[] encrypted = cipher.doFinal(data);
System.out.println(new String(encrypted, "utf-8"));
// 解密
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decrypted = cipher.doFinal(encrypted);
System.out.println(new String(decrypted, "utf-8"));
示例说明
1. 随机生成密钥示例
下面代码演示了如何使用随机生成密钥将一段文本进行加解密:
import javax.crypto.*;
import java.security.*;
import java.util.Base64;
public class DESDemo {
public static void main(String[] args) throws Exception {
// 生成密钥
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
keyGen.init(56);
SecretKey key = keyGen.generateKey();
// 加密
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key);
String str = "this is a secret message";
byte[] encrypted = cipher.doFinal(str.getBytes("utf-8"));
System.out.println("encrypted text: " + Base64.getEncoder().encodeToString(encrypted));
// 解密
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decrypted = cipher.doFinal(encrypted);
System.out.println("decrypted text: " + new String(decrypted, "utf-8"));
}
}
2. 用户自定义密钥示例
下面代码演示了如何使用用户自定义密钥将一段文本进行加解密:
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
import java.util.Base64;
public class DESDemo2 {
public static void main(String[] args) throws Exception {
String keyString = "12345678";
KeySpec spec=new DESKeySpec(keyString.getBytes());
SecretKeyFactory factory=SecretKeyFactory.getInstance("DES");
SecretKey key=factory.generateSecret(spec);
// 加密
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key);
String str = "this is a secret message";
byte[] encrypted = cipher.doFinal(str.getBytes("utf-8"));
System.out.println("encrypted text: " + Base64.getEncoder().encodeToString(encrypted));
// 解密
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decrypted = cipher.doFinal(encrypted);
System.out.println("decrypted text: " + new String(decrypted, "utf-8"));
}
}
以上就是使用 Java 实现对称加密算法的详细攻略,通过这篇文章你可以掌握对称加密算法的基本知识和实现方式,以及如何生成密钥、加解密文本的过程。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 对称加密算法实现详解 - Python技术站