在编程中,对于敏感数据需要加密保存,不恰当的加密会引发安全问题。常见的AES加密,明文和密钥相同的情况下每次加密出来的密文值都一样,上线使用后运维人员很容易根据密文值“猜”出明文,不利于用户数据的保护,下面将实现CBC模式的AES加密,随机生成iv值,加密后iv拼接在密文值后面,这样每次加密后,即使明文和密钥相同,得到的密文值也是不一样的。
1. maven依赖codec
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
2. java实现
package com.realjt.common.encrypt;
import java.nio.charset.StandardCharsets;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuc