node.js - 使用 Node.js 模块 nfc-pcsc 编写后,NFC Tag 的扇区不再工作
问题描述
我正在使用 Node.js 模块 nfc-pcsc 进行一些实验,但我不知道这是如何产生问题的。在下面的代码中,当卡片放在读卡器上时,程序会在前四个可用扇区中写入“a”、“b”、“c”和“d”。完成后,它会打印出“写入的数据”(无论是否真的有效),然后打印出 的值arr2
,其中程序存储了写入数据的扇区数:
const { NFC, TAG_ISO_14443_3, TAG_ISO_14443_4, KEY_TYPE_A, KEY_TYPE_B } = require('nfc-pcsc');
const nfc = new NFC();
nfc.on('reader', async reader => {
reader.on('card', async card => {
const arr = ['a', 'b', 'c', 'd'];
const arr2 = [];
let len = arr.length;
for (let i = 4, j = 0; i < 64 && j < len; i++) {
try {
let data = Buffer.allocUnsafe(16).fill(0);
data.write(arr[j]);
await reader.authenticate(i, KEY_TYPE_B, 'ffffffffffff');
await reader.write(i, data, 16);
j++;
arr2.push(i);
} catch { }
}
console.log('data written');
console.log(arr2);
});
reader.on('error', err => {
console.log(err);
});
reader.on('end', () => {
//
});
});
nfc.on('error', err => {
console.log(err);
});
所以完成后我想检查结果。我尝试运行以下代码,它遍历所有扇区,读取它们的数据并将其打印出来:
...
for (let i = 4; i < 64; i++) {
try {
await reader.authenticate(i, KEY_TYPE_B, 'ffffffffffff');
let data = (await reader.read(i, 16, 16)).toString();
console.log(`Sector ${i}: ${data}`);
} catch { }
}
...
结果呢?先前存储在arr2
变量中的扇区号不再出现:它们未通过身份验证。
但是,我尝试使用另一种代码仅写入一个扇区,这里是:
...
try {
let data = Buffer.allocUnsafe(16).fill(0);
data.write('a');
await reader.authenticate(28, KEY_TYPE_B, 'ffffffffffff');
await reader.write(28, data, 16);
console.log('data written');
} catch (err) {
console.log(err);
}
...
当运行与以前相同的代码来检查结果时,它现在可以工作并且该扇区保持不变。这怎么可能?还有,有什么办法可以恢复那些似乎消失的扇区?
解决方案
推荐阅读
- c# - 在 .NET CORE 中将 View Component 类设为泛型
- python-3.x - 在弹性搜索匹配查询中获取范围 [a, b] 之间的 _score 值
- discord.js - discord.js-commando TypeError:RichEmbed 不是构造函数
- r - 如何创建新列并通过 r 中的选定行添加列名
- rust - 调用函数返回但未分配的值的所有权会怎样?
- javascript - 无法为表中循环创建的单元格获取ElementById
- javascript - 如何在 React 中将 ArrayBuffer(PNG 图像)直接渲染为图像?
- python - 通过 xpath 查找 selenium 的元素
- swift - Xcode 自动生成的单元测试
- go - 如何为热图生成 1024 个十六进制颜色值的列表