gpt4 book ai didi

Android NFC 无法写入 Mifare DesFire 卡

转载 作者:太空狗 更新时间:2023-10-29 12:49:35 25 4
gpt4 key购买 nike

我正在尝试使用以下几行将一些数据写入带有 Galaxy S3 的 Mifare DesFire 卡:

private byte[] wrapMessage (byte command, byte[] parameters) throws Exception {
ByteArrayOutputStream stream = new ByteArrayOutputStream();

stream.write((byte) 0x90);
stream.write(command);
stream.write((byte) 0x00);
stream.write((byte) 0x00);
if (parameters != null) {
stream.write((byte) parameters.length);
stream.write(parameters);
}
stream.write((byte) 0x00);

return stream.toByteArray();
}

boolean isoDepWrite(Tag tag) {
IsoDep idTag = IsoDep.get(tag);
idTag.setTimeout(5000);

String info = "";
DesfireProtocol dfp = new DesfireProtocol(idTag);
try {
idTag.connect();
info += "Connected to IsoDep Tag...\n";

int[] appList = dfp.getAppList();
dfp.selectApp(appList[0]);
info += "Selected app no: " + appList[0] + "..\n";

int[] fileList = dfp.getFileList();
info += "Selected file no: " + fileList[0] + "\n";

byte[] params = {(byte)fileList[0],
(byte)0x0, (byte)0x0, (byte)0x0,
(byte)0x2, (byte)0x0, (byte)0x0,
(byte)0x41, (byte)0x41};
byte[] message = wrapMessage((byte) 0x3d, params);

byte[] result = idTag.transceive(message);
info += "Result bytes: " + convertByteArrayToHexString(result) + "\n";

toast(info);
return true;
} catch (IOException e) {
info += "Could not connect to IsoDep Tag...\n";
} catch (Exception e) {
info += "Error messages: " + e.getMessage() + " -- " + e.getLocalizedMessage() + "\n";
}

toast(info);
return false;
}

沟通后得到的信息是:

Connected to IsoDep tag...
Selected app no: 1109742 // that shows I connected to an Application
Transceieve result bytes: 91 9e // PARAMETER ERROR

我可以连接并读取该应用程序的文件,但在我尝试写入后文件中的字节为 0。 0x9E 是 PARAMETER_ERROR,所以我在包装/排列字节时做错了什么,是否有字节样本或关于此的想法?

编辑:我尝试了@nemo 推荐的字节:

{0x3d, fileList[0], 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x41, 0x41}

现在我得到“67 00”作为结果字节,这意味着LENGTH ERROR并且文件保持不变,只有 0。

最后编辑:我只是通过以下方式创建了一个新的字节数组:

wrapMessage(0x3d, rest of the bytes in the list @nemo recommended)

终于成功了。我用上面的工作改变了旧的。

最佳答案

我认为您的 Write 命令有误,但这是盲目尝试。

根据DESFire官方文档(尝试搜索M075031)WriteData定义如下:

WriteData(FileNo, Offset, Length, Data)

作为字节流,它看起来像这样:

WriteCmd FileNo  Offset (3 byte)  Length (3 byte)  Data (0 to 52 byte)
[0x3D] [0x00] [0x00 0x00 0x00] [0x00 0x00 0x00] [0x00 ... 0x00]

甚至可以比那些 52 字节多写 59 字节,但这在这里并不重要。

IMO 你应该像这样用 WriteCmd 所需的数据创建一个新数组:

{0x3d, fileList[0], 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x41, 0x41}

应该将 2 (0x2) 个字节(0x41 和 0x41)写入由 fileList[0] 标识的文件。

编辑:更新偏移量,顺序为 LSB 到 MSB。

关于Android NFC 无法写入 Mifare DesFire 卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13883620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com