Bläddra i källkod

author:dukun
describ:对卡密用AES进行加密

864633403@qq.com 5 år sedan
förälder
incheckning
c51bcd1103

+ 1 - 0
deventor-cor/src/main/java/com/bluefire/deventorcor/mybatis/dto/CardSecretInfo.java

@@ -27,6 +27,7 @@ public class CardSecretInfo {
      */
     private String cardSecret;
 
+
     /**
      * 面额
      */

+ 2 - 0
deventor-cor/src/main/java/com/bluefire/deventorcor/mybatis/entity/UnicomCardSecretEntity.java

@@ -7,11 +7,13 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.springframework.stereotype.Component;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
 
 @Data
+@Component
 @AllArgsConstructor
 @NoArgsConstructor
 @TableName(value = "unicom_card_secret")

+ 2 - 2
deventor-unicom-carmi/src/main/java/com/bluefire/deventorunicomcarmi/controller/UnicomCardSecretController.java

@@ -53,10 +53,10 @@ public class UnicomCardSecretController {
     public ResponseObject<String> makeGiveUnicomCard(BigDecimal facePrice) {
         String cardSecret = unicomCardSecretService.giveCardSecret(facePrice);
         log.info("request is : {}, response is : {} ",facePrice,cardSecret);
-        if (cardSecret == null) {
+        if ("500".equals(cardSecret)) {
             return WebResponse.WebResponse.error();
         } else {
-            return WebResponse.WebResponse.ok(unicomCardSecretService.giveCardSecret(facePrice));
+            return WebResponse.WebResponse.ok(cardSecret);
         }
     }
 

+ 24 - 6
deventor-unicom-carmi/src/main/java/com/bluefire/deventorunicomcarmi/service/impl/UnicomCardSecretImpl.java

@@ -1,6 +1,9 @@
 package com.bluefire.deventorunicomcarmi.service.impl;
 
 
+import cn.hutool.core.util.CharsetUtil;
+import cn.hutool.crypto.SecureUtil;
+import cn.hutool.crypto.symmetric.AES;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -35,10 +38,17 @@ public class UnicomCardSecretImpl extends ServiceImpl<UnicomCarmiMapper, UnicomC
     @Autowired
     private CallbackCardSecretStatus cardSecretStatus;
 
+    @Autowired
+    private UnicomCardSecretEntity unicomCardSecret;
+
 
     private String callbackUrl;
 
-    private String partnerKey = "tdz5xjtmuymkrhbx460iwv8kyw9hasqa";
+    private final static String  partnerKey = "tdz5xjtmuymkrhbx460iwv8kyw9hasqa";
+
+    private final static String key = "9lI82q3eBZhdwk7b";//aes加密密钥
+
+    private final static AES aes = SecureUtil.aes(key.getBytes());
 
 
     /**
@@ -59,7 +69,7 @@ public class UnicomCardSecretImpl extends ServiceImpl<UnicomCarmiMapper, UnicomC
                 cardSecretInfo.getCardSecret(),
                 cardSecretInfo.getFacePrice(),
                 cardSecretInfo.getCallbackUrl(),
-                cardSecretInfo.getTimestamp(), partnerKey
+                cardSecretInfo.getTimestamp(),partnerKey
         );
 
         String sign = DigestUtils.md5Hex(signSlice);
@@ -95,9 +105,14 @@ public class UnicomCardSecretImpl extends ServiceImpl<UnicomCarmiMapper, UnicomC
             return callbackCardSecret;
         }
 
-        UnicomCardSecretEntity unicomCardSecret = new UnicomCardSecretEntity();
+        //UnicomCardSecretEntity unicomCardSecret = new UnicomCardSecretEntity();
+
+
+        //解密
+        String cardSecret = aes.decryptStr(cardSecretInfo.getCardSecret(), CharsetUtil.CHARSET_UTF_8);
+
         unicomCardSecret.setTimestamp(now);
-        unicomCardSecret.setCardSecret(cardSecretInfo.getCardSecret());
+        unicomCardSecret.setCardSecret(cardSecret);
         unicomCardSecret.setFacePrice(cardSecretInfo.getFacePrice());
         unicomCardSecret.setStatus(1);
         this.baseMapper.insert(unicomCardSecret);
@@ -123,8 +138,11 @@ public class UnicomCardSecretImpl extends ServiceImpl<UnicomCarmiMapper, UnicomC
 
         String sign = DigestUtils.md5Hex(signSlice);
 
+        //解密
+        String queryCardSecret = aes.decryptStr(queryCardSecretInfo.getCardSecret(), CharsetUtil.CHARSET_UTF_8);
+
         QueryWrapper<UnicomCardSecretEntity> queryWrapper = new QueryWrapper<>();
-        QueryWrapper<UnicomCardSecretEntity> wrapper = queryWrapper.eq("card_secret", queryCardSecretInfo.getCardSecret());
+        QueryWrapper<UnicomCardSecretEntity> wrapper = queryWrapper.eq("card_secret", queryCardSecret);
         UnicomCardSecretEntity cardSecretEntity = this.baseMapper.selectOne(wrapper);
 
         /**
@@ -188,7 +206,7 @@ public class UnicomCardSecretImpl extends ServiceImpl<UnicomCarmiMapper, UnicomC
             return carmiList.get(0).getCardSecret();
 
         } else {
-            return null;
+            return "500";
         }
 
     }

+ 82 - 0
deventor-unicom-carmi/src/test/aes.py

@@ -0,0 +1,82 @@
+# -*- coding: utf-8 -*-
+
+
+import base64
+import requests
+from Crypto.Cipher import AES
+from urllib import parse
+
+
+class MyHash(object):
+    def __init__(self):
+        """
+        :param mode: AES加密模式
+        """
+        self.mode = AES.MODE_ECB
+
+    def My_Aes_Encrypt(self, key, msg):
+        """
+        Aes 算法加密 ( MODE = AES.MODE_ECB;无VI偏移量;)
+        :param key: 需加密的密钥
+        :param msg: 需加密的字符串
+        :return:
+        """
+        self.key = key
+        self.BS = len(key)
+        self.pad = lambda s: s + (self.BS - len(s) % self.BS) * chr(self.BS - len(s) % self.BS)
+        Cryptor = AES.new(self.key.encode("utf8"), self.mode)
+        self.ciphertext = Cryptor.encrypt(bytes(self.pad(msg), encoding="utf8"))
+        # AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题,使用base64编码
+        bin_encrypt_result = base64.b64encode(self.ciphertext)  # 输出的是二进制Unicode编码
+        return bin_encrypt_result.decode('utf8')
+
+    def My_Aes_Decrypt(self, key, msg):
+        """
+        Aes 算法解密 ( MODE = AES.MODE_ECB;无VI偏移量;)
+        :param key: 需解密的密钥
+        :param msg: 需解密的字符串
+        :return:
+        """
+        self.key = key
+        self.BS = len(key)
+        self.unpad = lambda s: s[0:-ord(s[-1:])]
+        decode = base64.b64decode(msg)
+        Cryptor = AES.new(self.key.encode("utf8"), self.mode)
+        self.plain_text = Cryptor.decrypt(decode)
+        bin_decrypt_result = self.unpad(self.plain_text)  # 输出的是二进制Unicode编码
+        return bin_decrypt_result.decode('utf8')
+
+    def My_Aes(self, key, msg):
+        """
+        Java 加/解密工具类接口
+        :param key: 需加密的密钥
+        :param msg: 需加密的字符串
+        :return: 加密后的字符
+        """
+        # 调用本地AES_jar包接口
+        url = 'http://127.0.0.1:4271/aes/encrypt'
+        payload = {
+            "psw": key,
+            "content": msg
+        }
+        r = requests.post(url=url, data=payload)
+        res = r.json()['Data']
+        return res
+
+
+helo = MyHash()
+
+'''
+if __name__ == '__main__':
+    print('--------------------------------------Python-AES加/解密部分--------------------------------------')
+    Aes_Key = "WuMlCJRN8zO886dw"
+    Aes_Encrypt_msg = "<FPXX><NSRSBH>330201999999868</NSRSBH><DDLSH>3302019999998684221</DDLSH></FPXX><FPXX><NSRSBH>330201999999868</NSRSBH>330201999999868</NSRSBH>"
+    res_Aes_Encrypt = helo.My_Aes_Encrypt(Aes_Key, Aes_Encrypt_msg)
+    print('Aes加密前字符串:{},\nAes加密结果:{}'.format(Aes_Encrypt_msg, res_Aes_Encrypt))
+    Aes_Decrypt_msg = "hhCWnmDtU1NxQlXiE+LMiRozGLJpbu2P/2hraeHuWUQdSUtwMmwlRlPzIJqI+lbilCOe9NU3jCm6ZcelKH3eaUie36oiU4X8S94ujyhlP/qL9mKXl4oqlQo+jZzvR2DnMn45V7v3dMQ21D97sdZQvB12t9W/O2wDzBMoKKBcqIeWiJybq/MSoGBkrmOzvs1F"
+    res_Aes_Decryot = helo.My_Aes_Decrypt(Aes_Key, Aes_Decrypt_msg)
+    print('Aes解密前字符串:{},\nAes解密解果:{}'.format(Aes_Decrypt_msg, res_Aes_Decryot))
+    print('--------------------------------------Java工具类-AES加/解密部分--------------------------------------')
+    Java_Encrypt_result = helo.My_Aes(Aes_Key, Aes_Encrypt_msg)
+    print('Java Aes加密接口加密后的结果:{}'.format(Java_Encrypt_result))
+'''

+ 2 - 2
deventor-unicom-carmi/src/test/test-unicom-carmi-give.py

@@ -1,7 +1,7 @@
 import requests
 
-#url = 'http://47.108.14.99:8086/unicom/card/secret/give'
-url = 'http://localhost:8086/unicom/card/secret/give'
+url = 'http://47.108.14.99:8086/unicom/card/secret/give'
+#url = 'http://localhost:8086/unicom/card/secret/give'
 
 params1 = {'facePrice': 30}
 response = requests.get(url = url,params = params1)

+ 11 - 2
deventor-unicom-carmi/src/test/test-unicom-carmi-push.py

@@ -4,6 +4,7 @@ import random
 import string
 import hashlib
 import requests
+from aes import MyHash
 
 partnerId = '108463'
 partnerKey = 'tdz5xjtmuymkrhbx460iwv8kyw9hasqa'
@@ -11,6 +12,14 @@ nonce = ''.join(random.sample(string.ascii_letters+string.digits,32))
 #nonce = 'WUKRmNYGcFaqgy7Hl8dbLOMzrSQuPfZ1'
 #print(nonce)
 cardSecret = ''.join(random.sample(string.ascii_letters+string.digits,32))
+#cardSecret = 'GLDSZQ42eX8MB3V1fNsucghj9U5JrRlD'
+#key = ''.join(random.sample(string.ascii_letters+string.digits,16))
+
+#print(key)
+#key = 'DXH5ozwbLtPuFhnJMdyijSI824k0ExWR'
+key = '9lI82q3eBZhdwk7b'
+helo = MyHash()
+cardSecret = helo.My_Aes_Encrypt(key,cardSecret)
 #cardSecret = 'VxuJa8EW4zKfykwt92ZFqToeiLG3gsCY'
 facePrice = 30
 callbackUrl = 'http://127.0.0.1:9888'
@@ -40,7 +49,7 @@ http_header = {
 
 s = requests.session()
 s.keep_alive = False
-#r_json = requests.post("http://47.108.14.99:8086/unicom/card/secret/push.json", data=data_json, headers=http_header)
-r_json = requests.post("http://localhost:8086/unicom/card/secret/push.json", data=data_json, headers=http_header)
+r_json = requests.post("http://47.108.14.99:8086/unicom/card/secret/push.json", data=data_json, headers=http_header)
+#r_json = requests.post("http://localhost:8086/unicom/card/secret/push.json", data=data_json, headers=http_header)
 #r_json = requests.post("http://47.108.14.99:8085/sup/order/add", data=data_json, headers=http_header)
 print( r_json.text )

+ 6 - 0
deventor-unicom-carmi/src/test/test-unicom-carmi-query.py

@@ -4,6 +4,7 @@ import random
 import string
 import hashlib
 import requests
+from aes import MyHash
 
 partnerId = '108463'
 partnerKey = 'tdz5xjtmuymkrhbx460iwv8kyw9hasqa'
@@ -11,6 +12,11 @@ nonce = ''.join(random.sample(string.ascii_letters+string.digits,32))
 print(nonce)
 #cardcardSecret = ''.join(random.sample(string.ascii_letters+string.digits,32))
 cardSecret = 'zO1PZKnDrJEp3VlNATj7BygvUY8c4LqI'
+key = '9lI82q3eBZhdwk7b'
+
+helo = MyHash()
+cardSecret = helo.My_Aes_Encrypt(key,cardSecret)
+
 timestamp = int(time.time())
 pre_sign = '{}{}{}{}{}'.format(partnerId,nonce,cardSecret,timestamp,partnerKey)
 #print(pre_sign)