- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用以下几行将一些数据写入带有 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/
我有一张非接触式卡,并且我知道它是 MIFARE 卡。我没有文件,也没有身份验证 key 。重置后,我收到以下 ATS: myubuntu@lol-MS-7693:~$ nfc-list nfc-li
在多个 Android 设备上,Mifare DESFire 通信被路由到 HCE 而不是脱离主机 (UICC)。 通过基于 OMAPI 与脱离主机安全元素的通信,我已经学会了如何将 AID 添加到
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
Stackoverflow 上有很多关于 Desfire EV1 卡的问题。 但是如果你搜索一些示例数据,你会发现几个字节的唯一地方是 Ridrix Blog .但这很不完整。 很多人在为 Desfi
有没有办法将 DESFire 卡重置为原始状态?是否有格式化和删除所有内容的命令? 我读到 DeleteApplication apdu 命令删除了应用程序及其文件,但空间仍然不可用。 谢谢。 最佳答
我需要在 Android 设备上模拟 DESFire EV1 卡。但是,我对如何将 Mifare SDK(精简版或高级版)与 HCE 结合使用感到困惑。 这可能吗?我需要开始这个项目,我对数据如何在
我知道如何从 Mifare DESFire 标签读取和写入 ndef 消息,但在与 Android 进行通信时,我很难理解如何使用 DESFire 支持的命令集。 我知道它与 transceive(b
上周我一直在尝试使用具有默认 key (00000000h) 的 MIFARE DESFire EV1 卡进行身份验证,但无济于事。我关注了this blog对信的指示。我实现了Send mode C
我已经实现了 AES key 多样化 AV2,现在我想知道什么是 SAM AV1,它是如何工作的?任何人都可以分享链接或提供一些信息吗? 只是为了分享一些知识,以 AV2 为例: /*
当使用 Desfire 原生包装的 APDU 与卡通信时,必须使用命令和响应的哪些部分来计算 CMAC? 身份验证成功后,我有以下 session key : Session Key: 7CCEBF7
我现在有一张新的 Desfire EV1 卡。我想用 AES 加密设置 PICC 主 key 。我怎么能那样做?到目前为止,我可以使用单个 DES 获取 session key 。 最佳答案 您需要从
我有一个使用 MIFARE DESFIRE EV1 卡创建考勤系统的项目。 我需要用于此项目的读卡器品牌仅支持 ISO 7816-x,因此我需要使用 DESFIRE ISO7816-4 APDU Wr
我正在尝试使用我的 Android 应用程序验证 DESFire 卡。我用 the example in this link解密我从卡上得到的字节。为此,我排除了解密中的填充(在下面注释掉),因为 D
我在使用 MIFARE DESFire 时遇到了一个非常奇怪的问题。当我写入少量数据(例如11字节)时,写入操作成功。然而,当我尝试写例如50字节,响应为917E,说明命令存在长度问题。 尝试写入11
有没有人知道如何解密从卡发送的第一条消息?我的意思是在身份验证成功之后,然后你发送一个命令(例如 0x51 (GetRealTagUID)。它返回 00+random32bits(总是不同的)。我尝试
哪种类型的 CRC 用于更改 Desfire 卡中的 key ?CRC 字节的顺序是否应该颠倒。我无法更改 PICC 应用程序的 key 。任何人都可以帮忙吗? 最佳答案 CRC16/32 和 MAC
我正在尝试使用以下几行将一些数据写入带有 Galaxy S3 的 Mifare DesFire 卡: private byte[] wrapMessage (byte command, byte[]
从 DESFire EVO1 卡(AES 加密)读取数据时,出现 InvalidResponseLengthException。我正在使用 taplinx 库版本 1.5 我的代码如下所示: priv
我有一个 DESfire Ev1 1.3 版卡,我正在尝试使用 ISO7816 apdu 样式选择一个文件。 我有一个文件,有帮助 A0 A1 A2我可以使用 native 或包装模式选择它: 本国的
我想在本地模式下使用 desfire 卡进行身份验证。这是我目前的步骤: 我选择主应用程序 (AID = 0×00 0×00 0×00) 我收到来自卡片的响应(一个“挑战”,randB) 然后,在第二
我是一名优秀的程序员,十分优秀!