puhanshu
2022-07-23 bbda2ee1af4e86d76f93e00386d77efb56c60d5f
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/helper/AESUtil.java
@@ -1,9 +1,5 @@
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;
@@ -13,17 +9,28 @@
import java.util.Arrays;
import java.util.Base64;
import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;
/**
 * AES 工具类
 */
public class AESUtil {
    private static SecretKeySpec secretKey;
    private static byte[] key;
    /**
     * AES 256 加密
     * @param strToEncrypt 要加密的字符串
     * @param secKey 秘钥
     * @param salt 盐
     *
     * @param strToEncrypt
     *            要加密的字符串
     * @param secKey
     *            秘钥
     * @param salt
     *            盐
     * @return 加密后的字符串
     */
    public static String encrypt256(String strToEncrypt, String secKey, String salt) {
@@ -38,8 +45,7 @@
            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)));
            return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes(StandardCharsets.UTF_8)));
        } catch (Exception e) {
            System.out.println("Error while encrypting: " + e.toString());
        }
@@ -48,12 +54,16 @@
    /**
     * AES 256 解密
     * @param strToDecrypt 要解密的字符串
     * @param secKey 秘钥
     * @param salt 盐
     *
     * @param strToDecrypt
     *            要解密的字符串
     * @param secKey
     *            秘钥
     * @param salt
     *            盐
     * @return 解密后的字符串
     */
    public static String decrypt256( String strToDecrypt, String secKey, String salt) {
    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);
@@ -72,49 +82,48 @@
        return null;
    }
    private static SecretKeySpec secretKey;
    private static byte[] key;
    public static void setKey(String myKey)
    {
    public static void setKey(String myKey) {
        MessageDigest sha = null;
        try {
            key = myKey.getBytes("UTF-8");
            key = myKey.getBytes(StandardCharsets.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) {
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
    /**
     * AES 128 加密
     * @param strToEncrypt 要加密的字符串
     * @param secret 秘钥
     * AES 128(base64)加密
     *
     * @param strToEncrypt
     *            要加密的字符串
     * @param secret
     *            秘钥
     * @return 加密后的字符串
     */
    public static String encrypt128(String strToEncrypt, String secret) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, UnsupportedEncodingException, BadPaddingException, IllegalBlockSizeException {
    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")));
        return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes(StandardCharsets.UTF_8)));
    }
    /**
     * AES 128 解密
     * @param strToDecrypt 要解密的字符串
     * @param secret 秘钥
     * AES 128(base64) 解密
     *
     * @param strToDecrypt
     *            要解密的字符串
     * @param secret
     *            秘钥
     * @return 解密后的字符串
     */
    public static String decrypt128(String strToDecrypt, String secret) throws NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException, InvalidKeyException {
    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);
@@ -140,12 +149,11 @@
class AES128Example {
    public static void main(String[] args) {
        String[] originalString = new String[]{"51011234567892013", "13612345678", "四川省成都市高新区", "四川省成都市高新"};
        String[] originalString = new String[] {"51011234567892013", "13612345678", "四川省成都市高新区", "四川省成都市高新"};
        String key = "5165465461dsfas";
        Arrays.stream(originalString).forEach(os ->{
        Arrays.stream(originalString).forEach(os -> {
            try {
                String encryptedString = AESUtil.encrypt128(os, key);
                String decryptedString = AESUtil.decrypt128(encryptedString, key);
@@ -153,7 +161,7 @@
                System.out.println(os);
                System.out.println(encryptedString);
                System.out.println(decryptedString);
            }catch (Exception e){
            } catch (Exception e) {
                e.printStackTrace();
            }
        });