From 5b9a5a629f8c31a8c05a918dcefc557b46651dfe Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期三, 11 九月 2024 17:28:18 +0800
Subject: [PATCH] 修复bug不让外部应用访问
---
qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java | 92 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 91 insertions(+), 1 deletions(-)
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java
index 4abdceb..5ce38e4 100644
--- a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java
@@ -11,6 +11,8 @@
import com.dayu.qiheonlinelibrary.card.UserCard;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
/**
* @author zx
@@ -70,6 +72,7 @@
int a = 1;
try {
MifareClassic mfc = MifareClassic.get(tag);
+ List<byte[]> list = new ArrayList<>();
if (null != mfc) {
try {
//杩炴帴NFC
@@ -96,7 +99,22 @@
//鍐欏崱
mfc.writeBlock(bIndex + b, data);
}
- return true;
+ int bIndex = mfc.sectorToBlock(1);
+ for (int j = 0; j < 3; j++) {
+ //璇诲彇鏁版嵁
+ byte[] data = null;
+ try {
+ data = mfc.readBlock(bIndex);
+ bIndex++;
+ list.add(data);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ if (userCard.equlsUserCard(list)) {
+ return true;
+ }
+ return false;
}
return false;
} catch (Exception e) {
@@ -241,6 +259,78 @@
}
/**
+ * 鍒濆鍖栧崱
+ *
+ * @return
+ */
+ public boolean initCard() {
+ try {
+ MifareClassic mfc = MifareClassic.get(tag);
+ if (null != mfc) {
+ try {
+ //杩炴帴NFC
+ mfc.connect();
+ //鑾峰彇鎵囧尯鏁伴噺
+ int count = mfc.getSectorCount();
+ byte[] data = new byte[16];
+ String initData = "FFFFFFFFFFFFFF078069FFFFFFFFFFFF";
+ byte[] initDataBytes = HexUtil.hexToByteArray(initData);
+ for (int sector = 0; sector < count; sector++) {
+ //楠岃瘉鎵囧尯瀵嗙爜
+ boolean isOpen = mfc.authenticateSectorWithKeyA(sector, defauleKey);
+ if (!isOpen) {
+ isOpen = mfc.authenticateSectorWithKeyA(sector, companyKey2);
+ if (isOpen) {
+ mfc.authenticateSectorWithKeyB(sector, companyKey2);
+ }
+ }
+ if (!isOpen) {
+ isOpen = mfc.authenticateSectorWithKeyA(sector, companyKey);
+ if (isOpen) {
+ mfc.authenticateSectorWithKeyB(sector, companyKey);
+ }
+ }
+ if (isOpen) {
+ //鑾峰彇鍐欑殑鎵囧尯鐨勫潡鐨勬暟閲�
+ int blockCount = mfc.getBlockCountInSector(sector);
+ int blockIndex = mfc.sectorToBlock(sector);
+ for (int block = 0; block < blockCount; block++) {
+ // 璺宠繃绗� 0 鎵囧尯鐨勭 0 鍧�
+ if (sector == 0 && block == 0) {
+ blockIndex++;
+ continue;
+ }
+
+ if (block < 3) {
+ mfc.writeBlock(blockIndex, data);
+ } else {
+ mfc.writeBlock(blockIndex, initDataBytes);
+ }
+ //鍐欏崱
+ blockIndex++;
+ }
+ }
+ }
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ } finally {
+ try {
+ mfc.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ return false;
+ }
+
+ /**
* 杩斿洖鐩戝惉绫�
*/
public interface NFCCallback {
--
Gitblit v1.8.0