在Java中,使用DES加密和解密数据是一个常见的安全需求。下面是一个简单的DES加密和解密的示例,使用Java的`javax.crypto`包。请注意,DES由于其较短的密钥长度(56位有效密钥长度),在现代安全标准下被认为是较弱的加密算法,但在一些特定场景下仍然可以使用。
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 {
// DES密钥长度是56位,但通常使用8字节(64位)的密钥数据,其中有一位用于奇偶校验
private static final int KEY_SIZE = 8;
public static void main(String[] args) throws Exception {
// 生成密钥
SecretKey secretKey = generateKey();
// 待加密的字符串
String originalText = "Hello, DES Encryption!";
// 加密
String encryptedText = encrypt(originalText, secretKey);
System.out.println("Encrypted Text: " + encryptedText);
// 解密
String decryptedText = decrypt(encryptedText, secretKey);
System.out.println("Decrypted Text: " + decryptedText);
}
// 生成DES密钥
private static SecretKey generateKey() throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(KEY_SIZE, new SecureRandom());
return keyGenerator.generateKey();
}
// 加密方法
private static String encrypt(String data, SecretKey key) throws Exception {
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedBytes = cipher.doFinal(data.getBytes());
return Base64.getEncoder().encodeToString(encryptedBytes);
}
// 解密方法
private static String decrypt(String encryptedData, SecretKey key) throws Exception {
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] originalBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
return new String(originalBytes);
}
}
**注意**:
- 在这个示例中,我使用了`Base64`编码来将加密后的字节数据转换为字符串,因为加密后的数据是二进制格式,直接以字符串形式展示可能会出现乱码。
- DES算法由于密钥长度较短,现在更推荐使用AES等更安全的加密算法。
- 请确保在生产环境中正确处理异常和错误,上面的示例为了简洁性而省略了详细的异常处理。