From a218ccaadff80203bcf82f251f0d448449858ac5 Mon Sep 17 00:00:00 2001 From: DESKTOP-71BH0QO\L、ming <172680469@qq.com> Date: 星期五, 02 四月 2021 09:41:49 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/helper/AESUtil.java | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 161 insertions(+), 0 deletions(-) diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/helper/AESUtil.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/helper/AESUtil.java new file mode 100644 index 0000000..22ea4b2 --- /dev/null +++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/helper/AESUtil.java @@ -0,0 +1,161 @@ +package com.panzhihua.common.model.helper; + +import javax.crypto.*; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.PBEKeySpec; +import javax.crypto.spec.SecretKeySpec; +import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.spec.KeySpec; +import java.util.Arrays; +import java.util.Base64; + +/** + * AES 工具类 + */ +public class AESUtil { + + + /** + * AES 256 加密 + * @param strToEncrypt 要加密的字符串 + * @param secKey 秘钥 + * @param salt 盐 + * @return 加密后的字符串 + */ + public static String encrypt256(String strToEncrypt, String secKey, String salt) { + try { + byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + IvParameterSpec ivspec = new IvParameterSpec(iv); + + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + KeySpec spec = new PBEKeySpec(secKey.toCharArray(), salt.getBytes(), 65536, 256); + SecretKey tmp = factory.generateSecret(spec); + SecretKeySpec secretKey = new SecretKeySpec(tmp.getEncoded(), "AES"); + + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivspec); + return Base64.getEncoder() + .encodeToString(cipher.doFinal(strToEncrypt.getBytes(StandardCharsets.UTF_8))); + } catch (Exception e) { + System.out.println("Error while encrypting: " + e.toString()); + } + return null; + } + + /** + * AES 256 解密 + * @param strToDecrypt 要解密的字符串 + * @param secKey 秘钥 + * @param salt 盐 + * @return 解密后的字符串 + */ + public static String decrypt256( String strToDecrypt, String secKey, String salt) { + try { + byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + IvParameterSpec ivspec = new IvParameterSpec(iv); + + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + KeySpec spec = new PBEKeySpec(secKey.toCharArray(), salt.getBytes(), 65536, 256); + SecretKey tmp = factory.generateSecret(spec); + SecretKeySpec secretKey = new SecretKeySpec(tmp.getEncoded(), "AES"); + + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING"); + cipher.init(Cipher.DECRYPT_MODE, secretKey, ivspec); + return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt))); + } catch (Exception e) { + System.out.println("Error while decrypting: " + e.toString()); + } + return null; + } + + + private static SecretKeySpec secretKey; + private static byte[] key; + + public static void setKey(String myKey) + { + MessageDigest sha = null; + try { + key = myKey.getBytes("UTF-8"); + sha = MessageDigest.getInstance("SHA-1"); + key = sha.digest(key); + key = Arrays.copyOf(key, 16); + secretKey = new SecretKeySpec(key, "AES"); + } + catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + + + /** + * AES 128 加密 + * @param strToEncrypt 要加密的字符串 + * @param secret 秘钥 + * @return 加密后的字符串 + */ + public static String encrypt128(String strToEncrypt, String secret) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, UnsupportedEncodingException, BadPaddingException, IllegalBlockSizeException { + setKey(secret); + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, secretKey); + return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8"))); + } + + /** + * AES 128 解密 + * @param strToDecrypt 要解密的字符串 + * @param secret 秘钥 + * @return 解密后的字符串 + */ + public static String decrypt128(String strToDecrypt, String secret) throws NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException, InvalidKeyException { + setKey(secret); + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); + cipher.init(Cipher.DECRYPT_MODE, secretKey); + return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt))); + } + +} + +class AES256Example { + public static void main(String[] args) { + String originalString = "howtodoinjava.com"; + + String secKey = "this is my super secrt key"; + String salt = "salt for me!!!"; + String encryptedString = AESUtil.encrypt256(originalString, secKey, salt); + String decryptedString = AESUtil.decrypt256(encryptedString, secKey, salt); + + System.out.println(originalString); + System.out.println(encryptedString); + System.out.println(decryptedString); + } +} + +class AES128Example { + public static void main(String[] args) { + String[] originalString = new String[]{"51011234567892013", "13612345678", "四川省成都市高新区", "四川省成都市高新"}; + + String key = "5165465461dsfas"; + + + Arrays.stream(originalString).forEach(os ->{ + try { + String encryptedString = AESUtil.encrypt128(os, key); + String decryptedString = AESUtil.decrypt128(encryptedString, key); + + System.out.println(os); + System.out.println(encryptedString); + System.out.println(decryptedString); + }catch (Exception e){ + e.printStackTrace(); + } + }); + } +} \ No newline at end of file -- Gitblit v1.7.1