diff --git a/inventory-dao/pom.xml b/inventory-dao/pom.xml
index f004b5d..6447bfa 100644
--- a/inventory-dao/pom.xml
+++ b/inventory-dao/pom.xml
@@ -10,7 +10,7 @@
inventory-dao
inventory-dao project for Spring Boot
- 1.8
+ 11
diff --git a/inventory-ent/pom.xml b/inventory-ent/pom.xml
index bc6b68c..8a20df7 100644
--- a/inventory-ent/pom.xml
+++ b/inventory-ent/pom.xml
@@ -17,7 +17,7 @@
- 1.8
+ 11
diff --git a/inventory-gov/pom.xml b/inventory-gov/pom.xml
index 940b933..b348395 100644
--- a/inventory-gov/pom.xml
+++ b/inventory-gov/pom.xml
@@ -17,7 +17,7 @@
- 1.8
+ 11
diff --git a/pom.xml b/pom.xml
index c2bcde9..0a44c18 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,8 +12,8 @@
inventory project for Spring Boot
- 1.8
- 1.8
+ 11
+ 11
diff --git a/utils/pom.xml b/utils/pom.xml
index 8aae5ff..3f23c35 100644
--- a/utils/pom.xml
+++ b/utils/pom.xml
@@ -12,8 +12,8 @@
- 1.8
- 1.8
+ 11
+ 11
@@ -326,6 +326,12 @@
+
+ cn.hutool
+ hutool-all
+ 5.8.11
+
+
diff --git a/utils/src/main/java/com/common/utils/encryption/ENDEUtils.java b/utils/src/main/java/com/common/utils/encryption/ENDEUtils.java
new file mode 100644
index 0000000..bdd76bc
--- /dev/null
+++ b/utils/src/main/java/com/common/utils/encryption/ENDEUtils.java
@@ -0,0 +1,146 @@
+package com.common.utils.encryption;
+
+
+import cn.hutool.core.util.CharsetUtil;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.asymmetric.KeyType;
+import cn.hutool.crypto.asymmetric.RSA;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.Base64.Decoder;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
+
+/**
+ * 省清单数据对接请求响应加解密工具
+ * Created by why on 2024/5/11.
+ */
+public class ENDEUtils {
+
+ private static final String AES_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
+
+ private static final String AES = "AES";
+
+ private static final Decoder BASE64DECODER = Base64.getMimeDecoder();
+
+ private static final Integer NANOID_SIZE = 16;
+
+ /**
+ * 请求加密公钥
+ */
+ private static final String RSA_PUBLIC = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCfjUOMOQ3EYNv3f6ARlVSHHdPVJaNoUPA5rNH9TCaPDWg/Mm7dk15ic1kNp4lKCYjSf6HszdN5NQl/Z/CGXGheKQB6Qm8je5MWa2ZVdpUbaO3ihhKzs3KFNHGryOm4P4yjiE6wmj8fun0ILsmgXLISIfYazijkD4InL+I6Dbv7awIDAQAB";
+
+ /**
+ * 响应解密私钥
+ */
+ private static final String RSA_PRIVATE = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALUqZHsHpD8iV+zbKqPMHLpJUsoLcSIDEJ31sW7XI7cRdYxGb8YFf8Rorb7mzdhzczNushb7H+IAf115/cdOPjbpUzRQ2uPvn87acPoW5gi82KZB1IPqe4sB+jKTmBeYCvkM2QZSUDQZYyElgbZ+DA6DpOVd7nsHzBycYdHckZ9nAgMBAAECgYARi+sSfXF7ieyBLNMK7UyFAHAL0KLi+/AClJbcWOsFIqRDc1kFEWhIEilt2XXrdnccbqbCEg2K+qhbWeLqCFp/Fk+YupPRYzXNAbVVjtaX/RD9xYDZ4UUmywlEgroQqKM5oOqBDYBT5W15eRTPghA3gcx0/Njm9qi6CQtrJriN2QJBANhKZOdJRbj20GMfZrokQProvhTxKH4uWVrooStG44PLZbsr0O0iTG4uf0IucF2VTuJRJXsUvdRqo0GZKWufoX8CQQDWbSGuJkdmdvmbGTkDqPayOqWCOSVA/CWGjzysMOIEkHfoltispn+QiC6E9bkTJUcFKuctH80mKiww13OU/iYZAkB8o3I+LeU1z1UKqd/CyH2BmXlgDBBvljn7vy6RB8q3+g/nqjo9TJSKsdS3yJcL9qx8kpJsuOkjbUgi1yYdVOH1AkBolLmEkq7oTsbW2qpwGoyXyPrIVM7SryguRNY2tXDHAR86lbgAHQTCnWjy+FXX/Kpy3sX5wDTylEcRW0PIO1yhAkA7GH64sKTxinoL6WIbnqkJnBZT4b88WhiD7AIjSHxFAQYwFT1bhrmT7QNuNzt6uXLwSTP0MAiqCe0YZbE1UPh9";
+
+ private static final RSA RSA = new RSA(RSA_PRIVATE, RSA_PUBLIC);
+
+
+ /**
+ * AES解密
+ *
+ * @param content 需要解密的字符串
+ * @param key 密钥
+ * @return
+ */
+ public static String AESDecode(String content, String key) {
+ try {
+ SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), AES);
+ Cipher cipher = Cipher.getInstance(AES_CIPHER_ALGORITHM);
+ cipher.init(Cipher.DECRYPT_MODE, skeySpec);
+ // 先用base64解密
+ byte[] encrypted = BASE64DECODER.decode(content);
+ return new String(cipher.doFinal(encrypted), StandardCharsets.UTF_8.displayName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+
+ /**
+ * AES加密
+ *
+ * @param content 需要加密的字符串
+ * @param key 密钥
+ * @return
+ * @throws Exception
+ */
+ public static String AESEncode(String content, String key) {
+ try {
+ SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), AES);
+ Cipher cipher = Cipher.getInstance(AES_CIPHER_ALGORITHM);
+ cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
+ byte[] encrypted = cipher.doFinal(content.getBytes(StandardCharsets.UTF_8.displayName()));
+ // 此处使用BASE64做转码功能,同时能起到2次加密的作用。
+ return cn.hutool.core.codec.Base64.encodeStr(encrypted, false, false);
+// return cn.hutool.core.codec.Base64.encode(encrypted);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+
+ /**
+ * 加密请求参数Request
+ * FIXME
+ *
+ * @param request 请求参数JSON字符格式
+ * @return
+ */
+ public static JSONObject RSAEncryptRequest(String request) {
+ String randomKey = IdUtil.nanoId(NANOID_SIZE);
+ String encryptData = AESEncode(request, randomKey);
+ byte[] encrypt = RSA.encrypt(StrUtil.bytes(randomKey, CharsetUtil.CHARSET_UTF_8), KeyType.PublicKey);
+ String encryptRandomKey = Base64.getEncoder().encodeToString(encrypt);
+ JSONObject json = new JSONObject();
+ json.put("k", encryptRandomKey);
+ json.put("v", encryptData);
+ return json;
+ }
+
+ /**
+ * 解密响应参数Response
+ * FIXME
+ *
+ * @param k,v 响应参数 k,v
+ * @return
+ */
+ public static JSONObject RSADecryptResponse(String k, String v) {
+ byte[] decrypt = RSA.decrypt(Base64.getDecoder().decode(k), KeyType.PrivateKey);
+ String decryptData = AESDecode(v, new String(decrypt, CharsetUtil.CHARSET_UTF_8));
+ return JSONObject.parseObject(decryptData);
+ }
+
+
+ public static void main(String[] args) {
+ //加密请求测试JSON格式字符参数
+ String bodyStr = "{\"sysUniqueCode\":\"273556746985934848\"}";
+ //加密请求参数
+ JSONObject req = RSAEncryptRequest(bodyStr);
+ System.out.println("k----> "+req.getString("k"));
+ System.out.println("v----> "+req.getString("v"));
+ //数据市州CODE对接登录测试
+ HttpResponse execute = HttpUtil.createPost("https://qdz.scasst.net/prod-api/auth/sync/getToken")
+ //临时取消加密
+// .header("bg-debug", "2")
+ .body(req.toJSONString()).execute();
+ JSONObject res = JSONObject.parseObject(execute.body());
+ //解密响应参数
+ JSONObject response = RSADecryptResponse(res.getString("k"), res.getString("v"));
+ System.out.println("response ---> "+response);
+
+ }
+
+
+}