qrcode取8位sign
diff --git a/bus-qrcode/build.gradle b/bus-qrcode/build.gradle
index 0817cb6..8559f1d 100644
--- a/bus-qrcode/build.gradle
+++ b/bus-qrcode/build.gradle
@@ -7,7 +7,7 @@
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 93070d0..e920f0e 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.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 @@
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 @@
}
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 @@
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<String, String> result = new HashMap<>();
@@ -340,16 +338,16 @@
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 e029765..d144174 100644
--- a/payapi/build.gradle
+++ b/payapi/build.gradle
@@ -125,7 +125,7 @@
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'