AES 加密
Java基础包中已经提供了算法,直接拿走用就好了
public static final String CIPHER_AES_CBC_PKCS5Padding = "AES/CBC/PKCS5Padding"; public static final String IV_DEFAULT = "1234567890654321"; public static final String CIPHER_AES = "AES";
import cn.seaboot.common.bean.P; import javax.crypto.*; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.security.*; /** * 对称加密 * * @author ChenSS 2016-11-30 * @date 1.0 */ public class AES { private static IvParameterSpec iv = new IvParameterSpec(P.IV_DEFAULT.getBytes()); /** * 十六进制加密 * * @param data 数据 * @param key 密钥 * @return 加密数据 * @throws GeneralSecurityException - */ public static String encryptHex(String data, Key key) throws GeneralSecurityException { return Hex.encodeToString(encrypt(data.getBytes(), key)); } /** * 十六进制解密 * * @param encryptedData 数据 * @param key 密钥 * @return 解密数据 * @throws GeneralSecurityException - */ public static String decryptHex(String encryptedData, Key key) throws GeneralSecurityException { return new String(decrypt(Hex.decode(encryptedData.toCharArray()), key)); } /** * 数据加密 * * @param data 源 * @param key 密钥 * @return 加密结果 * @throws GeneralSecurityException - */ public static byte[] encrypt(byte[] data, Key key) throws GeneralSecurityException { return encrypt(data, key, iv); } /** * 数据解密 * * @param data 源 * @param key 密钥 * @return 解密结果 * @throws GeneralSecurityException - */ public static byte[] decrypt(byte[] data, Key key) throws GeneralSecurityException { return decrypt(data, key, iv); } /** * 加密向量 * * @param iv 向量 * @return IvParameterSpec */ public static IvParameterSpec getIvParameterSpec(byte[] iv) { return new IvParameterSpec(iv); } /** * 生成密钥 * * @param key 长度必须是32的倍数 * @return SecretKey * @throws IllegalArgumentException - */ public static SecretKey generateSecretKey(byte[] key) { if (key.length % 32 != 0) { throw new IllegalArgumentException("key size must be a multiple of 32"); } return new SecretKeySpec(key, P.CIPHER_AES); } /** * 加密 * * @param data 数据 * @param keySpec 密钥 * @param iv 加密向量 * @return 加密后的字符串 * @throws GeneralSecurityException - */ public static byte[] encrypt(byte[] data, Key keySpec, IvParameterSpec iv) throws GeneralSecurityException { Cipher cipher = Cipher.getInstance(P.CIPHER_AES_CBC_PKCS5Padding); cipher.init(Cipher.ENCRYPT_MODE, keySpec, iv); return cipher.doFinal(data); } /** * 解密 * * @param data 数据 * @param keySpec 密钥 * @param iv 加密向量 * @return 加密后的字符串 * @throws GeneralSecurityException a lots of Exception implement GeneralSecurityException */ public static byte[] decrypt(byte[] data, Key keySpec, IvParameterSpec iv) throws GeneralSecurityException { Cipher cipher = Cipher.getInstance(P.CIPHER_AES_CBC_PKCS5Padding); cipher.init(Cipher.DECRYPT_MODE, keySpec, iv); return cipher.doFinal(data); } }
疯狂的妞妞 :每一天,做什么都好,不要什么都不做!