From 43b71bead83fc982b0af35542ebdcb4c8f344b99 Mon Sep 17 00:00:00 2001 From: xuwujing <1060589146@qq.com> Date: Wed, 2 Jan 2019 14:35:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0AES=E5=8A=A0=E8=A7=A3?= =?UTF-8?q?=E5=AF=86=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/pancm/utils/AESUtil.java | 142 +++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 src/main/java/com/pancm/utils/AESUtil.java diff --git a/src/main/java/com/pancm/utils/AESUtil.java b/src/main/java/com/pancm/utils/AESUtil.java new file mode 100644 index 0000000..d653365 --- /dev/null +++ b/src/main/java/com/pancm/utils/AESUtil.java @@ -0,0 +1,142 @@ +package com.pancm.utils; + + +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.logging.Level; +import java.util.logging.Logger; + +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; + +import org.apache.commons.codec.binary.Base64; + + +/** + * +* @Title: AESUtil +* @Description: +* AES 加密工具类 +* @Version:1.0.0 +* @author pancm +* @date 2018年4月3日 + */ +public class AESUtil { + + private static final String KEY_ALGORITHM = "AES"; + /** 秘钥 16位*/ + private static final String PASSWORD = "e!@$%s^&*a)_m+s."; + private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";//默认的加密算法 + + + + /** + * AES 加密操作 + * + * @param content 待加密内容 + * @return 返回Base64转码后的加密数据 + */ + public static String encrypt(String content) { + return encrypt(content,PASSWORD); + } + + + /** + * AES 加密操作 + * + * @param content 待加密内容 + * @param password 加密密码 + * @return 返回Base64转码后的加密数据 + */ + public static String encrypt(String content, String password) { + try { + Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);// 创建密码器 + + byte[] byteContent = content.getBytes("utf-8"); + + cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(password));// 初始化为加密模式的密码器 + + byte[] result = cipher.doFinal(byteContent);// 加密 + + return Base64.encodeBase64String(result);//通过Base64转码返回 + } catch (Exception ex) { + Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex); + } + + return null; + } + + /** + * AES 解密操作 + * @param content + * @return + */ + public static String decrypt(String content) { + return decrypt(content,PASSWORD); + } + + /** + * AES 解密操作 + * @param content + * @param password + * @return + */ + public static String decrypt(String content, String password) { + + try { + //实例化 + Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM); + + //使用密钥初始化,设置为解密模式 + cipher.init(Cipher.DECRYPT_MODE, getSecretKey(password)); + + //执行操作 + byte[] result = cipher.doFinal(Base64.decodeBase64(content)); + + return new String(result, "utf-8"); + } catch (Exception ex) { + Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex); + } + + return null; + } + + /** + * 生成加密秘钥 + * + * @return + */ + private static SecretKeySpec getSecretKey(final String password) { + //返回生成指定算法密钥生成器的 KeyGenerator 对象 + KeyGenerator kg = null; + + try { + kg = KeyGenerator.getInstance(KEY_ALGORITHM); + + //AES 要求密钥长度为 128 + kg.init(128, new SecureRandom(password.getBytes())); + + //生成一个密钥 + SecretKey secretKey = kg.generateKey(); + + return new SecretKeySpec(secretKey.getEncoded(), KEY_ALGORITHM);// 转换为AES专用密钥 + } catch (NoSuchAlgorithmException ex) { + Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex); + } + + return null; + } + + public static void main(String[] args) { + String s = "1234"; + String s1 = AESUtil.encrypt(s, "1234"); + System.out.println("s1:" + s1); + + System.out.println("s2:"+AESUtil.decrypt(s1, "1234")); + + + } + +}