From 86a8f5a700a19d8e55da5f5f0d5edd6b1284934f Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期一, 07 八月 2023 12:35:34 +0800
Subject: [PATCH] update 优化 加密实现 使用 EncryptUtils 统一处理
---
ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/Sm4Encryptor.java | 24 ++------
ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/RsaEncryptor.java | 15 ++---
ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/Sm2Encryptor.java | 15 ++---
ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/AesEncryptor.java | 26 ++------
ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/utils/EncryptUtils.java | 68 ++++++++++++++++++++++
ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/Base64Encryptor.java | 6 +-
6 files changed, 95 insertions(+), 59 deletions(-)
diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/AesEncryptor.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/AesEncryptor.java
index 228a362..e4dc597 100644
--- a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/AesEncryptor.java
+++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/AesEncryptor.java
@@ -1,14 +1,9 @@
package org.dromara.common.encrypt.core.encryptor;
-import cn.hutool.core.util.ArrayUtil;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.crypto.SecureUtil;
-import cn.hutool.crypto.symmetric.AES;
import org.dromara.common.encrypt.core.EncryptContext;
import org.dromara.common.encrypt.enumd.AlgorithmType;
import org.dromara.common.encrypt.enumd.EncodeType;
-
-import java.nio.charset.StandardCharsets;
+import org.dromara.common.encrypt.utils.EncryptUtils;
/**
* AES绠楁硶瀹炵幇
@@ -18,20 +13,11 @@
*/
public class AesEncryptor extends AbstractEncryptor {
- private final AES aes;
+ private final EncryptContext context;
public AesEncryptor(EncryptContext context) {
super(context);
- String password = context.getPassword();
- 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浣嶏紝瀹為檯涓�" + password.length() + "浣�");
- }
- aes = SecureUtil.aes(context.getPassword().getBytes(StandardCharsets.UTF_8));
+ this.context = context;
}
/**
@@ -51,9 +37,9 @@
@Override
public String encrypt(String value, EncodeType encodeType) {
if (encodeType == EncodeType.HEX) {
- return aes.encryptHex(value);
+ return EncryptUtils.encryptByAesHex(value, context.getPassword());
} else {
- return aes.encryptBase64(value);
+ return EncryptUtils.encryptByAes(value, context.getPassword());
}
}
@@ -64,6 +50,6 @@
*/
@Override
public String decrypt(String value) {
- return this.aes.decryptStr(value);
+ return EncryptUtils.decryptByAes(value, context.getPassword());
}
}
diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/Base64Encryptor.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/Base64Encryptor.java
index 4003954..0028548 100644
--- a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/Base64Encryptor.java
+++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/Base64Encryptor.java
@@ -1,9 +1,9 @@
package org.dromara.common.encrypt.core.encryptor;
-import cn.hutool.core.codec.Base64;
import org.dromara.common.encrypt.core.EncryptContext;
import org.dromara.common.encrypt.enumd.AlgorithmType;
import org.dromara.common.encrypt.enumd.EncodeType;
+import org.dromara.common.encrypt.utils.EncryptUtils;
/**
* Base64绠楁硶瀹炵幇
@@ -33,7 +33,7 @@
*/
@Override
public String encrypt(String value, EncodeType encodeType) {
- return Base64.encode(value);
+ return EncryptUtils.encryptByBase64(value);
}
/**
@@ -43,6 +43,6 @@
*/
@Override
public String decrypt(String value) {
- return Base64.decodeStr(value);
+ return EncryptUtils.decryptByBase64(value);
}
}
diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/RsaEncryptor.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/RsaEncryptor.java
index 61b1dff..5f03a4b 100644
--- a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/RsaEncryptor.java
+++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/RsaEncryptor.java
@@ -1,13 +1,10 @@
package org.dromara.common.encrypt.core.encryptor;
-import cn.hutool.core.codec.Base64;
-import cn.hutool.crypto.SecureUtil;
-import cn.hutool.crypto.asymmetric.KeyType;
-import cn.hutool.crypto.asymmetric.RSA;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.encrypt.core.EncryptContext;
import org.dromara.common.encrypt.enumd.AlgorithmType;
import org.dromara.common.encrypt.enumd.EncodeType;
+import org.dromara.common.encrypt.utils.EncryptUtils;
/**
@@ -18,7 +15,7 @@
*/
public class RsaEncryptor extends AbstractEncryptor {
- private final RSA rsa;
+ private final EncryptContext context;
public RsaEncryptor(EncryptContext context) {
super(context);
@@ -27,7 +24,7 @@
if (StringUtils.isAnyEmpty(privateKey, publicKey)) {
throw new IllegalArgumentException("RSA鍏閽ュ潎闇�瑕佹彁渚涳紝鍏挜鍔犲瘑锛岀閽ヨВ瀵嗐��");
}
- this.rsa = SecureUtil.rsa(Base64.decode(privateKey), Base64.decode(publicKey));
+ this.context = context;
}
/**
@@ -47,9 +44,9 @@
@Override
public String encrypt(String value, EncodeType encodeType) {
if (encodeType == EncodeType.HEX) {
- return rsa.encryptHex(value, KeyType.PublicKey);
+ return EncryptUtils.encryptByRsaHex(value, context.getPublicKey());
} else {
- return rsa.encryptBase64(value, KeyType.PublicKey);
+ return EncryptUtils.encryptByRsa(value, context.getPublicKey());
}
}
@@ -60,6 +57,6 @@
*/
@Override
public String decrypt(String value) {
- return this.rsa.decryptStr(value, KeyType.PrivateKey);
+ return EncryptUtils.decryptByRsa(value, context.getPrivateKey());
}
}
diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/Sm2Encryptor.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/Sm2Encryptor.java
index c728cf8..aec5d82 100644
--- a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/Sm2Encryptor.java
+++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/Sm2Encryptor.java
@@ -1,13 +1,10 @@
package org.dromara.common.encrypt.core.encryptor;
-import cn.hutool.core.codec.Base64;
-import cn.hutool.crypto.SmUtil;
-import cn.hutool.crypto.asymmetric.KeyType;
-import cn.hutool.crypto.asymmetric.SM2;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.encrypt.core.EncryptContext;
import org.dromara.common.encrypt.enumd.AlgorithmType;
import org.dromara.common.encrypt.enumd.EncodeType;
+import org.dromara.common.encrypt.utils.EncryptUtils;
/**
* sm2绠楁硶瀹炵幇
@@ -17,7 +14,7 @@
*/
public class Sm2Encryptor extends AbstractEncryptor {
- private final SM2 sm2;
+ private final EncryptContext context;
public Sm2Encryptor(EncryptContext context) {
super(context);
@@ -26,7 +23,7 @@
if (StringUtils.isAnyEmpty(privateKey, publicKey)) {
throw new IllegalArgumentException("SM2鍏閽ュ潎闇�瑕佹彁渚涳紝鍏挜鍔犲瘑锛岀閽ヨВ瀵嗐��");
}
- this.sm2 = SmUtil.sm2(Base64.decode(privateKey), Base64.decode(publicKey));
+ this.context = context;
}
/**
@@ -46,9 +43,9 @@
@Override
public String encrypt(String value, EncodeType encodeType) {
if (encodeType == EncodeType.HEX) {
- return sm2.encryptHex(value, KeyType.PublicKey);
+ return EncryptUtils.encryptBySm2Hex(value, context.getPublicKey());
} else {
- return sm2.encryptBase64(value, KeyType.PublicKey);
+ return EncryptUtils.encryptBySm2(value, context.getPublicKey());
}
}
@@ -59,6 +56,6 @@
*/
@Override
public String decrypt(String value) {
- return this.sm2.decryptStr(value, KeyType.PrivateKey);
+ return EncryptUtils.decryptBySm2(value, context.getPrivateKey());
}
}
diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/Sm4Encryptor.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/Sm4Encryptor.java
index 2a32faf..adaf674 100644
--- a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/Sm4Encryptor.java
+++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/encryptor/Sm4Encryptor.java
@@ -1,13 +1,9 @@
package org.dromara.common.encrypt.core.encryptor;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.crypto.SmUtil;
-import cn.hutool.crypto.symmetric.SM4;
import org.dromara.common.encrypt.core.EncryptContext;
import org.dromara.common.encrypt.enumd.AlgorithmType;
import org.dromara.common.encrypt.enumd.EncodeType;
-
-import java.nio.charset.StandardCharsets;
+import org.dromara.common.encrypt.utils.EncryptUtils;
/**
* sm4绠楁硶瀹炵幇
@@ -17,19 +13,11 @@
*/
public class Sm4Encryptor extends AbstractEncryptor {
- private final SM4 sm4;
+ private final EncryptContext context;
public Sm4Encryptor(EncryptContext context) {
super(context);
- String password = context.getPassword();
- if (StrUtil.isBlank(password)) {
- throw new IllegalArgumentException("SM4娌℃湁鑾峰緱绉橀挜淇℃伅");
- }
- // sm4绠楁硶鐨勭閽ヨ姹傛槸16浣嶉暱搴�
- if (16 != password.length()) {
- throw new IllegalArgumentException("SM4绉橀挜闀垮害搴旇涓�16浣嶏紝瀹為檯涓�" + password.length() + "浣�");
- }
- this.sm4 = SmUtil.sm4(password.getBytes(StandardCharsets.UTF_8));
+ this.context = context;
}
/**
@@ -49,9 +37,9 @@
@Override
public String encrypt(String value, EncodeType encodeType) {
if (encodeType == EncodeType.HEX) {
- return sm4.encryptHex(value);
+ return EncryptUtils.encryptBySm4Hex(value, context.getPassword());
} else {
- return sm4.encryptBase64(value);
+ return EncryptUtils.encryptBySm4(value, context.getPassword());
}
}
@@ -62,6 +50,6 @@
*/
@Override
public String decrypt(String value) {
- return this.sm4.decryptStr(value);
+ return EncryptUtils.decryptBySm4(value, context.getPassword());
}
}
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
index 3504573..8e34843 100644
--- 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
@@ -68,6 +68,25 @@
}
/**
+ * AES鍔犲瘑
+ *
+ * @param data 寰呰В瀵嗘暟鎹�
+ * @param password 绉橀挜瀛楃涓�
+ * @return 鍔犲瘑鍚庡瓧绗︿覆, 閲囩敤Hex缂栫爜
+ */
+ public static String encryptByAesHex(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)).encryptHex(data, StandardCharsets.UTF_8);
+ }
+
+ /**
* AES瑙e瘑
*
* @param data 寰呰В瀵嗘暟鎹�
@@ -103,6 +122,25 @@
throw new IllegalArgumentException("SM4绉橀挜闀垮害瑕佹眰涓�16浣�");
}
return SmUtil.sm4(password.getBytes(StandardCharsets.UTF_8)).encryptBase64(data, StandardCharsets.UTF_8);
+ }
+
+ /**
+ * sm4鍔犲瘑
+ *
+ * @param data 寰呭姞瀵嗘暟鎹�
+ * @param password 绉橀挜瀛楃涓�
+ * @return 鍔犲瘑鍚庡瓧绗︿覆, 閲囩敤Base64缂栫爜
+ */
+ public static String encryptBySm4Hex(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)).encryptHex(data, StandardCharsets.UTF_8);
}
/**
@@ -153,6 +191,21 @@
}
/**
+ * sm2鍏挜鍔犲瘑
+ *
+ * @param data 寰呭姞瀵嗘暟鎹�
+ * @param publicKey 鍏挜
+ * @return 鍔犲瘑鍚庡瓧绗︿覆, 閲囩敤Hex缂栫爜
+ */
+ public static String encryptBySm2Hex(String data, String publicKey) {
+ if (StrUtil.isBlank(publicKey)) {
+ throw new IllegalArgumentException("SM2闇�瑕佷紶鍏ュ叕閽ヨ繘琛屽姞瀵�");
+ }
+ SM2 sm2 = SmUtil.sm2(null, publicKey);
+ return sm2.encryptHex(data, StandardCharsets.UTF_8, KeyType.PublicKey);
+ }
+
+ /**
* sm2绉侀挜瑙e瘑
*
* @param data 寰呭姞瀵嗘暟鎹�
@@ -196,6 +249,21 @@
}
/**
+ * rsa鍏挜鍔犲瘑
+ *
+ * @param data 寰呭姞瀵嗘暟鎹�
+ * @param publicKey 鍏挜
+ * @return 鍔犲瘑鍚庡瓧绗︿覆, 閲囩敤Hex缂栫爜
+ */
+ public static String encryptByRsaHex(String data, String publicKey) {
+ if (StrUtil.isBlank(publicKey)) {
+ throw new IllegalArgumentException("RSA闇�瑕佷紶鍏ュ叕閽ヨ繘琛屽姞瀵�");
+ }
+ RSA rsa = SecureUtil.rsa(null, publicKey);
+ return rsa.encryptHex(data, StandardCharsets.UTF_8, KeyType.PublicKey);
+ }
+
+ /**
* rsa绉侀挜瑙e瘑
*
* @param data 寰呭姞瀵嗘暟鎹�
--
Gitblit v1.9.3