下面是关于Java对称加密几种算法分别实现的攻略:
一、对称加密算法简介
对称加密算法是指加密和解密使用同一密钥的加密算法,也叫私钥加密算法。对称加密算法又分为块加密算法和流加密算法两种,块加密算法是按照固定长度的数据块进行加密,而流加密算法是按照流式数据进行加密。
二、对称加密算法的实现
Java中对称加密算法的实现主要包括以下几种:
1. DES加密算法
DES算法是最早的商业加密标准,采用的是对称加密模式,密钥长64位,分为8个字节,但是实际上是56位密钥和8位校验位。DES算法已经不再安全,一般用于加密较短的数据。
具体实现代码如下:
public static String encryptDES(String source, String key) throws Exception {
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
byte[] keyBytes = key.getBytes();
byte[] keyData = new byte[8];
System.arraycopy(keyBytes, 0, keyData, 0, Math.min(keyBytes.length, keyData.length));
SecretKeySpec keySpec = new SecretKeySpec(keyData, "DES");
IvParameterSpec ivSpec = new IvParameterSpec(keyData);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
byte[] encrypted = cipher.doFinal(source.getBytes());
return Base64.getEncoder().encodeToString(encrypted);
}
2. 3DES加密算法
3DES算法是DES算法的加强版,它使用3个不同的56位密钥,即168位密钥,主要是为了增加安全性,3DES算法虽然比DES算法更安全,但加密解密也更耗时。
具体实现代码如下:
public static String encrypt3DES(String source, String key) throws Exception {
Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
byte[] keyBytes = key.getBytes();
byte[] keyData = new byte[24];
System.arraycopy(keyBytes, 0, keyData, 0, Math.min(keyBytes.length, keyData.length));
SecretKeySpec keySpec = new SecretKeySpec(keyData, "DESede");
IvParameterSpec ivSpec = new IvParameterSpec(keyData);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
byte[] encrypted = cipher.doFinal(source.getBytes());
return Base64.getEncoder().encodeToString(encrypted);
}
3. AES加密算法
AES算法是当前比较流行的加密算法之一,它的密钥长度可选128位、192位或256位,AES算法的加密解密速度非常快,而且密钥长度越长安全性越高。
具体实现代码如下:
public static String encryptAES(String source, String key) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] keyBytes = key.getBytes();
byte[] keyData = new byte[16];
System.arraycopy(keyBytes, 0, keyData, 0, Math.min(keyBytes.length, keyData.length));
SecretKeySpec keySpec = new SecretKeySpec(keyData, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(keyData);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
byte[] encrypted = cipher.doFinal(source.getBytes());
return Base64.getEncoder().encodeToString(encrypted);
}
三、代码示例
下面提供一个简单的示例,使用DES算法进行加密和解密,其中密钥为"12345678",要加密的明文为"Hello World!":
public static void main(String[] args) throws Exception {
String key = "12345678";
String source = "Hello World!";
String encrypted = encryptDES(source, key);
System.out.println("加密结果:" + encrypted);
String decrypted = decryptDES(encrypted, key);
System.out.println("解密结果:" + decrypted);
}
输出结果为:
加密结果:OEMbXMKrJYysWSD9yBcM4A==
解密结果:Hello World!
再给一个示例,使用AES算法进行加密和解密,其中密钥为"1234567890123456",要加密的明文为"Hello World!":
public static void main(String[] args) throws Exception {
String key = "1234567890123456";
String source = "Hello World!";
String encrypted = encryptAES(source, key);
System.out.println("加密结果:" + encrypted);
String decrypted = decryptAES(encrypted, key);
System.out.println("解密结果:" + decrypted);
}
输出结果为:
加密结果:hcB248l9mfTtFcSl5lK5JQ==
解密结果:Hello World!
以上就是Java对称加密几种算法的实现方式以及代码示例,希望能帮到你。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 对称加密几种算法分别实现 - Python技术站