Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用AC/SC读卡器从Mifare Ultralight卡获得创意签名_C#_Nfc_Mifare - Fatal编程技术网

C# 使用AC/SC读卡器从Mifare Ultralight卡获得创意签名

C# 使用AC/SC读卡器从Mifare Ultralight卡获得创意签名,c#,nfc,mifare,C#,Nfc,Mifare,目前,在我的C#控制台应用程序中,我已经通过使用ModWinsCard发送APDU命令实现了NFC标记读取器功能。到目前为止,我可以获得一个已连接读卡器的列表,连接到它,获取NFC标记的UID,并将NDEF消息读/写到NFC标记 现在,我正试图通过验证原始签名,根据本文件(第8.9节),检查所讨论的NFC标签是否是NXP制作的真实标签 然而,虽然我已经实现了签名验证,但我还无法从NFC标签中获取签名,因为第10.8节(READ_SIG)没有APDU命令的任何等效项 是否有任何APDU命令可用于将

目前,在我的C#控制台应用程序中,我已经通过使用ModWinsCard发送APDU命令实现了NFC标记读取器功能。到目前为止,我可以获得一个已连接读卡器的列表,连接到它,获取NFC标记的UID,并将NDEF消息读/写到NFC标记

现在,我正试图通过验证原始签名,根据本文件(第8.9节),检查所讨论的NFC标签是否是NXP制作的真实标签

然而,虽然我已经实现了签名验证,但我还无法从NFC标签中获取签名,因为第10.8节(READ_SIG)没有APDU命令的任何等效项


是否有任何APDU命令可用于将READ_SIG命令发送到NFC标记并获取原始签名?如果有帮助的话,我目前使用的读卡器是ACS ACR1281U-C1。

如果您查看同一文档的第10.8节,READ\u SIG只是一个标准的低级命令,如READ或WRITE或FAST\u READ,您只需
将正确的字节数组收发到卡上并处理返回的字节数组

我不做c#和ModWinsCard,但一眼就能看出,您需要使用
byte SendBuff
byte array of
[3C,00]
发送
SCardTransmit
,并接收回一个32字节数组

我已经在Android上用Java轻松地做到了这一点

额外信息NTAG 21X卡仅为2类卡,不使用APDU

从数据表中

NTAG213、NTAG215和NTAG216(从现在起,通常称为NTAG21x)的设计完全符合NFC论坛类型2标签

2类卡的通用NFC文件可用

只有类型4卡使用APDU命令

更新: 这有帮助吗?


似乎您可以通过“传递”APDU级别来发送本机命令(在本例中,0x1B是一个类型2命令,密码验证正确,同时还可以传递命令,即3C 00,您必须传递2个字节的CRC。

感谢您的指针。我尝试将SendBuff字节数组设置为[3C,00],sendLength 2和recvLength 32将与SCardTransmit一起发送。但是,它返回错误代码31,这在我当前用于C#的ModWinsCard代码段中没有记录。我还尝试使用ACS提供的APDU工具直接发送命令(据我所知,有问题的阅读器将APDU命令转换为Mifare特定命令),结果发现代码31表示“连接到系统的设备不工作”。我仍然可以通过发送
[FF CA 00]来获得标签的UID
。似乎您需要将Type 2命令包装到右侧的APDU命令中,并添加了指向另一个答案的链接,该答案似乎是迄今为止获得签名的最佳选择。我发送了以下字节:
[FF 00 00 04 D4 42 3C 00]
,这将符合指定的READ\u SIG命令。当SCard\u状态为SCard\u S\u SUCCESS时,读取器返回字节
[63 00]
,表示操作失败。Java Android示例仅接收字节
[3C 00]
所以我不知道我是否在这个命令中遗漏了什么。我会尝试
[D4,40]
命令,就像海报上用这个命令写的密码一样,我在Java中用
[3C,00]
的收发机尝试过它,我得到了预期的32 bytesTried
[D4,40]
但也没有运气,仍然返回
[63,00]
。我还运行了Java Android示例,以及NXP的TagInfo应用程序,以确保我拥有的标记实际上支持READ_SIG,并且确保Java返回了32字节的签名并进行了验证,而NXP TagInfo也能够在扫描时验证签名。