1.5 RC
RC加密包括RC2,RC4,RC5,RC2 是由著名密码学家 Ron Rivest 设计的一种传统对称分组加密算法,它可作为 DES 算法的建议替代算法。它的输入和输出都是64bit。密钥的长度是从1字节到128字节可变,但目前的实现是8字节(1998年)。
参考:
加解密篇 - 对称加密算法 (DES、3DES、AES、RC)
2 前后端实现AES对称加解密方式
- AES为对称加密算法,顾名思义,如果是前后端加解密场景,那前端需要保存一份秘钥,后端也需要保存一份秘钥,这两个秘钥是相同的,才可以实现加解密。
- AES的秘钥默认长度为16位,初始向量 IV也是16位,这两个默认长度一定要遵守,否则会有很多不可未知的错误。如果需要增加秘钥的长度增加复杂性,则推荐使用RC加密算法,因为该算法的秘钥长度可变。
- 待解密长度需要为16的倍数,否则会报以下错误,常用的解决办法为加密后使用Base64包装密文,则会自动补齐为16的倍数,解密时先使用Base64解密,则密文一定是16的整数倍。
Input length must be multiple of 16 when decrypting with padded cipher
3 后端AES对称加解密(ECB和CBC模式)工具类
import org.apache.commons.lang3.StringUtils;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
/\*\*
\* @author
\* @description AES加解密(ECB和CBC模式)
\* @date 2023/12/8 15:08
\*/
public class AESEncryptUtil {
/\*\*
\* 加密模式
\* ECB: AES/ECB/PKCS5Padding
\* CBC: AES/CBC/NoPadding
\*/
private static final String[] TRANSFORM\_ALGORITHM = new String[]{"AES/ECB/PKCS5Padding", "AES/CBC/NoPadding"};
/\*\*
\* 初始向量样式 IV
\*/
private static String iv = "HBJNRU56MDk4NzK6";
private static final String ALGORITHM = "AES";
private static final String CHARSET\_NAME = "UTF-8";
/\*\*
\* AES加解key样式
\*/
public static String ENCRYPT\_KEY = "7CC408B24462ABD1";
/\*\*
\* AES的ECB模式加解
\* @param data 待加密参数
\* @param key 加密key
\* @return
\*/
public static String encryptECB(String data, String key) {
if (StringUtils.isEmpty(key)) {
throw new IllegalArgumentException("加密失败,加密key为空");
}
SecretKeySpec aesKey = new SecretKeySpec(key.getBytes(Charset.forName(CHARSET\_NAME)), ALGORITHM);
try {
Cipher cipher = Cipher.getInstance(TRANSFORM\_ALGORITHM[0]);
cipher.init(Cipher.ENCRYPT\_MODE, aesKey);
byte[] encrypted = cipher.doFinal