#node.js #nfc
Вопрос:
Я провожу пару экспериментов, используя 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 =gt; { reader.on('card', async card =gt; { const arr = ['a', 'b', 'c', 'd']; const arr2 = []; let len = arr.length; for (let i = 4, j = 0; i lt; 64 amp;amp; j lt; 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 =gt; { console.log(err); }); reader.on('end', () =gt; { // }); }); nfc.on('error', err =gt; { console.log(err); });
Поэтому, когда все закончится, я хочу проверить результаты. Я пытаюсь запустить следующий код, который перебирает все сектора, считывает их данные и распечатывает их:
... for (let i = 4; i lt; 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); } ...
And when running the same code as before to check the results, it now worked and the sector has stayed intact. How is this possible? And also, is there any way I can recover those sectors which seem they disappeared?