From 43a0bcc8ba11e94b1c258b2c905dd8a6221e06c2 Mon Sep 17 00:00:00 2001 From: "kaixiang.xia" Date: Mon, 1 Feb 2021 11:10:11 +0800 Subject: [PATCH] =?utf8?q?qrcode=E5=8F=968=E4=BD=8Dsign?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- bus-qrcode/build.gradle | 2 +- .../com/supwisdom/dlpay/busqrcode/QrCode.java | 30 +++++++++---------- payapi/build.gradle | 2 +- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/bus-qrcode/build.gradle b/bus-qrcode/build.gradle index 0817cb6e..8559f1d9 100644 --- a/bus-qrcode/build.gradle +++ b/bus-qrcode/build.gradle @@ -7,7 +7,7 @@ plugins { group = rootProject.group -def sdkVersion = '1.3.5' +def sdkVersion = '1.3.6' sourceCompatibility = 1.8 targetCompatibility = 1.8 diff --git a/bus-qrcode/src/main/java/com/supwisdom/dlpay/busqrcode/QrCode.java b/bus-qrcode/src/main/java/com/supwisdom/dlpay/busqrcode/QrCode.java index 93070d0c..e920f0e1 100644 --- a/bus-qrcode/src/main/java/com/supwisdom/dlpay/busqrcode/QrCode.java +++ b/bus-qrcode/src/main/java/com/supwisdom/dlpay/busqrcode/QrCode.java @@ -13,7 +13,6 @@ import java.security.NoSuchAlgorithmException; import java.time.Duration; import java.time.Instant; import java.util.*; -import java.util.concurrent.TimeUnit; import static com.supwisdom.dlpay.busqrcode.BinUtil.*; import static com.supwisdom.dlpay.busqrcode.CryptoUtil.*; @@ -37,7 +36,7 @@ public class QrCode { qrDataKeys.add(FIELD_CARDTYPE); qrDataKeys.add(FIELD_TOTP); qrDataKeys.add(FIELD_RANDOM); -// qrDataKeys.add(FIELD_SIGN); + qrDataKeys.add(FIELD_SIGN); } private Builder qrBuilder; @@ -271,18 +270,17 @@ public class QrCode { } final byte[] sign = sha256(byteConcat(qrData.getBytes(), factor)); -// final byte[] signT = new byte[20]; -// System.arraycopy(sign, 0, signT, 0, 20); //取前20位 - final byte[] encDataPlain = byteConcat(qrData.getBytes(), DELIMITER.getBytes(), sign); -// final byte[] encData = aesEncryptCFB(qrBuilder.rootKey, encDataPlain, qrBuilder.iv); - final byte[] encData = aesEncryptCFB(qrBuilder.rootKey, qrData.getBytes(), qrBuilder.iv); + final byte[] signT = new byte[8]; + System.arraycopy(sign, 0, signT, 0, 8); //取前8位 + final byte[] encDataPlain = byteConcat(qrData.getBytes(), DELIMITER.getBytes(), signT); + final byte[] encData = aesEncryptCFB(qrBuilder.rootKey, encDataPlain, qrBuilder.iv); final String code = encodeBase64(encData); String result = code; if (qrBuilder.prefix != null) { result = qrBuilder.prefix + code; } if (qrBuilder.debug) { - System.out.println("hex sign=[" + encodeHex(sign) + "]"); + System.out.println("hex sign=[" + encodeHex(signT) + "]"); System.out.println("hex encDataPlain=[" + encodeHex(encData) + "]"); System.out.println("QR code=[" + result + "]"); System.out.println("====================== Build QR Code End ================================="); @@ -321,8 +319,8 @@ public class QrCode { if (qrBuilder.debug) { System.out.println("encDataPlain=[" + encData + "]"); } - final String[] fields = encData.split(DELIMITER, 5); - if (fields.length < 5) { + final String[] fields = encData.split(DELIMITER, 6); + if (fields.length < 6) { throw new RuntimeException("二维码数据异常!"); } Map result = new HashMap<>(); @@ -340,16 +338,16 @@ public class QrCode { final String uid = result.get(FIELD_UID); final byte[] factor = getSignFactor(uid); final byte[] calcSign = sha256(byteConcat(qrData.getBytes(), factor)); -// final byte[] signT = new byte[20]; -// System.arraycopy(calcSign, 0, signT, 0, 20); //取前20位 + final byte[] signT = new byte[8]; + System.arraycopy(calcSign, 0, signT, 0, 8); //取前8位 if (qrBuilder.debug) { -// System.out.println("calcSign=[" + new String(calcSign) + "]"); + System.out.println("calcSign=[" + new String(signT) + "]"); System.out.println(" sign=[" + result.get(FIELD_SIGN) + "]"); System.out.println("====================== Decode QR Code End ================================="); } -// if (!new String(signT).equalsIgnoreCase(result.get(FIELD_SIGN))) { -// throw new RuntimeException("二维码验证错误!"); -// } + if (!new String(signT).equalsIgnoreCase(result.get(FIELD_SIGN))) { + throw new RuntimeException("二维码验证错误!"); + } return result; } diff --git a/payapi/build.gradle b/payapi/build.gradle index e0297651..d1441749 100644 --- a/payapi/build.gradle +++ b/payapi/build.gradle @@ -125,7 +125,7 @@ dependencies { implementation group: 'com.alipay.sdk', name: 'alipay-sdk-java', version: '3.7.110.ALL' /*大理二维码jar*/ - implementation 'com.supwisdom:dlsmk-qrcode:1.3.5' + implementation 'com.supwisdom:dlsmk-qrcode:1.3.6' annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" annotationProcessor 'org.projectlombok:lombok:1.18.8' -- 2.17.1