DES加解密java
前言
数据加密标准(Data Encryption Standard,DES)是一种对称加密算法,它使用相同的密钥进行加密和解密。DES算法在1977年被美国联邦政府正式采用,并在商业上广泛应用。本文将介绍如何使用Java实现DES加解密,并提供相应的代码示例。
DES算法原理
DES算法的加密和解密分别由两个过程组成,称为加密轮数和解密轮数。加密轮数使用相同的轮函数,但密钥逆序排列。解密轮数与加密轮数相反,使用相同的轮函数和密钥。DES算法的主要步骤如下:
- 初始置换(Initial Permutation):将明文按照一定规则进行置换。
- 16轮加密/解密:将明文(密文)和子密钥进行一系列操作,每轮操作包括扩展置换、异或运算、S盒代替、P盒替换和置换操作。
- 逆置换(Final Permutation):对最后一轮操作的结果进行逆置换,得到最终的密文(明文)。
Java实现DES加解密
加密函数
以下是Java实现DES加密的示例代码:
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class DESUtils {
private static final String ALGORITHM = "DES";
public static String encrypt(String plainText, String key) throws Exception {
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
return Base64.getEncoder().encodeToString(encryptedBytes);
}
}
解密函数
以下是Java实现DES解密的示例代码:
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class DESUtils {
private static final String ALGORITHM = "DES";
public static String decrypt(String encryptedText, String key) throws Exception {
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
return new String(decryptedBytes);
}
}
流程图
以下是DES加解密的流程图:
flowchart TD
start[开始]
initialize[初始化密钥]
generateKeys[生成子密钥]
encrypt[加密]
decrypt[解密]
end[结束]
start --> initialize
initialize --> generateKeys
generateKeys --> encrypt
encrypt --> decrypt
decrypt --> end
示例代码
以下是使用DES加解密的示例代码:
public class Main {
private static final String PLAIN_TEXT = "Hello, DES!";
private static final String KEY = "s3cr3tk3y";
public static void main(String[] args) {
try {
String encryptedText = DESUtils.encrypt(PLAIN_TEXT, KEY);
System.out.println("Encrypted Text: " + encryptedText);
String decryptedText = DESUtils.decrypt(encryptedText, KEY);
System.out.println("Decrypted Text: " + decryptedText);
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出结果:
Encrypted Text: f7sK4a6bmzg=
Decrypted Text: Hello, DES!
总结
本文介绍了DES加解密算法的原理,并提供了使用Java实现DES加解密的示例代码。DES算法是一种经典的对称加密算法,通过密钥进行加密和解密操作。在实际应用中,我们可以使用DES算法来保护敏感数据的安全性。希望本文对你理解和使用DES加解密算法有所帮助。