在Java中,使用DES(Data Encryption Standard)进行加密和解密通常涉及到`javax.crypto`包中的类。以下是一个简单的DES加密和解密的实例。请注意,由于DES密钥长度限制为56位(实际上通常使用64位,其中8位用于奇偶校验),这里我们使用了8字节(64位)的密钥。
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.util.Base64;
public class DESEncryptDecryptExample {
// 加密方法
public static String encrypt(String data, String key) throws Exception {
SecretKey secretKey = generateKey(key.getBytes());
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encrypted = cipher.doFinal(data.getBytes());
return Base64.getEncoder().encodeToString(encrypted);
}
// 解密方法
public static String decrypt(String encryptedData, String key) throws Exception {
SecretKey secretKey = generateKey(key.getBytes());
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] original = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
return new String(original);
}
// 生成密钥
private static SecretKey generateKey(byte[] key) throws Exception {
// DES算法要求密钥长度为8字节
if (key.length != 8) {
throw new IllegalArgumentException("Invalid key size for DES. Key must be exactly 8 bytes long.");
}
return new SecretKeySpec(key, "DES");
}
public static void main(String[] args) {
try {
String key = "12345678"; // DES密钥
String originalData = "Hello, World!";
// 加密
String encrypted = encrypt(originalData, key);
System.out.println("Encrypted: " + encrypted);
// 解密
String decrypted = decrypt(encrypted, key);
System.out.println("Decrypted: " + decrypted);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在这个例子中,我们定义了三个方法:`encrypt`用于加密数据,`decrypt`用于解密数据,以及`generateKey`用于根据给定的字节数组生成`SecretKey`对象。在`main`方法中,我们展示了如何使用这些方法来加密和解密一个简单的字符串。
注意:DES算法由于其较短的密钥长度(56位有效密钥长度),现在被认为是不够安全的,因此在安全要求较高的场合建议使用更安全的算法,如AES。