From 0ebcac34e32580dcb631507a5ef6823449e32b63 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期二, 18 四月 2023 22:04:26 +0800 Subject: [PATCH] add 新增 EncryptUtils 加解密工具类 --- ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/utils/EncryptUtils.java | 233 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 233 insertions(+), 0 deletions(-) diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/utils/EncryptUtils.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/utils/EncryptUtils.java new file mode 100644 index 0000000..6ed9fe7 --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/utils/EncryptUtils.java @@ -0,0 +1,233 @@ +package org.dromara.common.encrypt.utils; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.SmUtil; +import cn.hutool.crypto.asymmetric.KeyType; +import cn.hutool.crypto.asymmetric.RSA; +import cn.hutool.crypto.asymmetric.SM2; + +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; + +/** + * 瀹夊叏鐩稿叧宸ュ叿绫� + * + * @author 鑰侀┈ + */ +public class EncryptUtils { + /** + * 鍏挜 + */ + public static final String PUBLIC_KEY = "publicKey"; + /** + * 绉侀挜 + */ + public static final String PRIVATE_KEY = "privateKey"; + + /** + * Base64鍔犲瘑 + * + * @param data 寰呭姞瀵嗘暟鎹� + * @return 鍔犲瘑鍚庡瓧绗︿覆 + */ + public static String encryptByBase64(String data) { + return Base64.encode(data, StandardCharsets.UTF_8); + } + + /** + * Base64瑙e瘑 + * + * @param data 寰呰В瀵嗘暟鎹� + * @return 瑙e瘑鍚庡瓧绗︿覆 + */ + public static String decryptByBase64(String data) { + return Base64.decodeStr(data, StandardCharsets.UTF_8); + } + + /** + * AES鍔犲瘑 + * + * @param data 寰呰В瀵嗘暟鎹� + * @param password 绉橀挜瀛楃涓� + * @return 鍔犲瘑鍚庡瓧绗︿覆, 閲囩敤Base64缂栫爜 + */ + public static String encryptByAes(String data, String password) { + if (StrUtil.isBlank(password)) { + throw new IllegalArgumentException("AES闇�瑕佷紶鍏ョ閽ヤ俊鎭�"); + } + // aes绠楁硶鐨勭閽ヨ姹傛槸16浣嶃��24浣嶃��32浣� + int[] array = {16, 24, 32}; + if (!ArrayUtil.contains(array, password.length())) { + throw new IllegalArgumentException("AES绉橀挜闀垮害瑕佹眰涓�16浣嶃��24浣嶃��32浣�"); + } + return SecureUtil.aes(password.getBytes(StandardCharsets.UTF_8)).encryptBase64(data, StandardCharsets.UTF_8); + } + + /** + * AES瑙e瘑 + * + * @param data 寰呰В瀵嗘暟鎹� + * @param password 绉橀挜瀛楃涓� + * @return 瑙e瘑鍚庡瓧绗︿覆 + */ + public static String decryptByAes(String data, String password) { + if (StrUtil.isBlank(password)) { + throw new IllegalArgumentException("AES闇�瑕佷紶鍏ョ閽ヤ俊鎭�"); + } + // aes绠楁硶鐨勭閽ヨ姹傛槸16浣嶃��24浣嶃��32浣� + int[] array = {16, 24, 32}; + if (!ArrayUtil.contains(array, password.length())) { + throw new IllegalArgumentException("AES绉橀挜闀垮害瑕佹眰涓�16浣嶃��24浣嶃��32浣�"); + } + return SecureUtil.aes(password.getBytes(StandardCharsets.UTF_8)).decryptStr(data, StandardCharsets.UTF_8); + } + + /** + * sm4鍔犲瘑 + * + * @param data 寰呭姞瀵嗘暟鎹� + * @param password 绉橀挜瀛楃涓� + * @return 鍔犲瘑鍚庡瓧绗︿覆, 閲囩敤Base64缂栫爜 + */ + public static String encryptBySm4(String data, String password) { + if (StrUtil.isBlank(password)) { + throw new IllegalArgumentException("SM4闇�瑕佷紶鍏ョ閽ヤ俊鎭�"); + } + // sm4绠楁硶鐨勭閽ヨ姹傛槸16浣嶉暱搴� + int sm4PasswordLength = 16; + if (sm4PasswordLength != password.length()) { + throw new IllegalArgumentException("SM4绉橀挜闀垮害瑕佹眰涓�16浣�"); + } + return SmUtil.sm4(password.getBytes(StandardCharsets.UTF_8)).encryptBase64(data, StandardCharsets.UTF_8); + } + + /** + * sm4瑙e瘑 + * + * @param data 寰呰В瀵嗘暟鎹� + * @param password 绉橀挜瀛楃涓� + * @return 瑙e瘑鍚庡瓧绗︿覆 + */ + public static String decryptBySm4(String data, String password) { + if (StrUtil.isBlank(password)) { + throw new IllegalArgumentException("SM4闇�瑕佷紶鍏ョ閽ヤ俊鎭�"); + } + // sm4绠楁硶鐨勭閽ヨ姹傛槸16浣嶉暱搴� + int sm4PasswordLength = 16; + if (sm4PasswordLength != password.length()) { + throw new IllegalArgumentException("SM4绉橀挜闀垮害瑕佹眰涓�16浣�"); + } + return SmUtil.sm4(password.getBytes(StandardCharsets.UTF_8)).decryptStr(data, StandardCharsets.UTF_8); + } + + /** + * 浜х敓sm2鍔犺В瀵嗛渶瑕佺殑鍏挜鍜岀閽� + * + * @return 鍏閽ap + */ + public static Map<String, String> generateSm2Key() { + Map<String, String> keyMap = new HashMap<>(2); + SM2 sm2 = SmUtil.sm2(); + keyMap.put(PRIVATE_KEY, sm2.getPrivateKeyBase64()); + keyMap.put(PUBLIC_KEY, sm2.getPublicKeyBase64()); + return keyMap; + } + + /** + * sm2鍏挜鍔犲瘑 + * + * @param data 寰呭姞瀵嗘暟鎹� + * @param publicKey 鍏挜 + * @return 鍔犲瘑鍚庡瓧绗︿覆, 閲囩敤Base64缂栫爜 + */ + public static String encryptBySm2(String data, String publicKey) { + if (StrUtil.isBlank(publicKey)) { + throw new IllegalArgumentException("SM2闇�瑕佷紶鍏ュ叕閽ヨ繘琛屽姞瀵�"); + } + SM2 sm2 = SmUtil.sm2(null, publicKey); + return sm2.encryptBase64(data, StandardCharsets.UTF_8, KeyType.PublicKey); + } + + /** + * sm2绉侀挜瑙e瘑 + * + * @param data 寰呭姞瀵嗘暟鎹� + * @param privateKey 绉侀挜 + * @return 瑙e瘑鍚庡瓧绗︿覆 + */ + public static String decryptBySm2(String data, String privateKey) { + if (StrUtil.isBlank(privateKey)) { + throw new IllegalArgumentException("SM2闇�瑕佷紶鍏ョ閽ヨ繘琛岃В瀵�"); + } + SM2 sm2 = SmUtil.sm2(privateKey, null); + return sm2.decryptStr(data, KeyType.PrivateKey, StandardCharsets.UTF_8); + } + + /** + * 浜х敓RSA鍔犺В瀵嗛渶瑕佺殑鍏挜鍜岀閽� + * + * @return 鍏閽ap + */ + public static Map<String, String> generateRsaKey() { + Map<String, String> keyMap = new HashMap<>(2); + RSA rsa = SecureUtil.rsa(); + keyMap.put(PRIVATE_KEY, rsa.getPrivateKeyBase64()); + keyMap.put(PUBLIC_KEY, rsa.getPublicKeyBase64()); + return keyMap; + } + + /** + * rsa鍏挜鍔犲瘑 + * + * @param data 寰呭姞瀵嗘暟鎹� + * @param publicKey 鍏挜 + * @return 鍔犲瘑鍚庡瓧绗︿覆, 閲囩敤Base64缂栫爜 + */ + public static String encryptByRsa(String data, String publicKey) { + if (StrUtil.isBlank(publicKey)) { + throw new IllegalArgumentException("RSA闇�瑕佷紶鍏ュ叕閽ヨ繘琛屽姞瀵�"); + } + RSA rsa = SecureUtil.rsa(null, publicKey); + return rsa.encryptBase64(data, StandardCharsets.UTF_8, KeyType.PublicKey); + } + + /** + * rsa绉侀挜瑙e瘑 + * + * @param data 寰呭姞瀵嗘暟鎹� + * @param privateKey 绉侀挜 + * @return 瑙e瘑鍚庡瓧绗︿覆 + */ + public static String decryptByRsa(String data, String privateKey) { + if (StrUtil.isBlank(privateKey)) { + throw new IllegalArgumentException("RSA闇�瑕佷紶鍏ョ閽ヨ繘琛岃В瀵�"); + } + RSA rsa = SecureUtil.rsa(privateKey, null); + return rsa.decryptStr(data, KeyType.PrivateKey, StandardCharsets.UTF_8); + } + + /** + * md5鍔犲瘑 + * + * @param data 寰呭姞瀵嗘暟鎹� + * @return 鍔犲瘑鍚庡瓧绗︿覆, 閲囩敤Hex缂栫爜 + */ + public static String encryptByMd5(String data) { + return SecureUtil.md5(data); + } + + /** + * sha256鍔犲瘑 + * + * @param data 寰呭姞瀵嗘暟鎹� + * @return 鍔犲瘑鍚庡瓧绗︿覆, 閲囩敤Hex缂栫爜 + */ + public static String encryptBySha256(String data) { + return SecureUtil.sha256(data); + } + +} -- Gitblit v1.9.3