这节整理 对称加密 基本介绍、使用场景及特点,以及 Java (AES)实现机制(文末附代码,需要的自取哈)
三、对称加密

定义:
加密和解密时使用 同一把密钥 得加密方式,也称密钥加密
常用算法:推荐AES加密
1、 DES (Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;
2、3DES( Triple DES ):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高;
3、AES(Advanced Encryption Standard): 高级加密标准 ,是下一代的加密算法标准,速度快,安全级别高,支持128、192、256位密钥的加密;
4、Blowfish
特征:
1、加密方和解密方使用同一个密钥;
2、加密解密的速度比较快,适合数据比较长时的使用;
3、密钥传输的过程不安全,且容易被破解,密钥管理也比较麻烦;
Java实现方式(使用AES)
package com.joy.demo.util;
import org. apache .commons.codec.binary.Base64;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.security.NoSuchAlgorithm Exception ;
import java.security.SecureRandom;
/**
* User: Joy
* Description:
* Date: 2022-10-31 10:13
*/
public class AesUtil {
// 生成 私钥 key
public static byte [] getKeyStr() {
try {
KeyGenerator keyGenerator = KeyGenerator. getInstance ("AES");
// Secure Random生成默认长度的key
keyGenerator.init(new SecureRandom());
SecretKey secretKey = keyGenerator.generateKey();
byte[] bytesKey = secretKey.getEncoded();
System.out.println("key 是 :" + bytesKey.to string ());
return bytesKey;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
/**
* 加密
*
* @param contentStr
* @param bytesKey
* @return
*/
public static byte[] jdkAesEncrypt(String contentStr, byte[] bytesKey) {
try {
// KEY转换
// 如果key作为string参数传递 需用以下格式编码转换!!!
// String string = new String(bytesKey," ISO-8859-1 ");
// byte[] result1 = String .getBytes("ISO-8859-1");
Key key = new SecretKeySpec(bytesKey, "AES");
// 加密
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
// 加密执行
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] result = cipher.doFinal(contentStr.getBytes("utf-8"));
System.out.println("加密后 jdkAesEncrypt:" + Base64.encodeBase64String(result));
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 解密
*
* @param encryptBytes
* @param bytesKey
* @return
*/
public static String jdkAesDecrypt(byte[] encryptBytes, byte[] bytesKey) {
String outputStr = "";
try {
// KEY转换
Key key = new SecretKeySpec(bytesKey, "AES");
// 解密
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
// 解密执行
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decryptBytes = cipher.doFinal(encryptBytes);
outputStr = new String(decryptBytes);
System.out.println("解密后明文是 :" + outputStr);
} catch (Exception e) {
e.printStackTrace();
}
return outputStr;
}
public static void main(String[] args) {
String content = "明文是123";
System.out.println("明文是:" + content);
byte[] key = getKeyStr();
jdkAesDecrypt(jdkAesEncrypt(content, key), key);
}
}
