From 86057640112de33f35a2c87fa824122aab000e18 Mon Sep 17 00:00:00 2001
From: huanghongfa <huanghongfa123456>
Date: 星期五, 02 四月 2021 09:43:17 +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