C# MIFARE经典-什么可能导致;“所有零键”;及;“未知密钥”;错误?
我已经开发了一个C#应用程序来写入MIFARE经典卡。我使用默认键(C# MIFARE经典-什么可能导致;“所有零键”;及;“未知密钥”;错误?,c#,authentication,rfid,mifare,contactless-smartcard,C#,Authentication,Rfid,Mifare,Contactless Smartcard,我已经开发了一个C#应用程序来写入MIFARE经典卡。我使用默认键(FF FF FF)写入卡 写入卡后,我注意到没有数据进入扇区1的块。相反,扇区1如下图所示(使用NXP TagInfo读取时): 此外,我无法再验证扇区1内的块 这是在我写了我的申请卡后发生的。在写入之前,块很好(可以读取) 那么,是什么导致了这个问题?是什么导致NXP TagInfo中的“全零键”和“未知键”错误? 这些并不是真正的错误。这只是告诉您,NXP TagInfo无法读取扇区,因为它不知道(“未知密钥”)对扇区1进
FF FF FF
)写入卡
写入卡后,我注意到没有数据进入扇区1的块。相反,扇区1如下图所示(使用NXP TagInfo读取时):
此外,我无法再验证扇区1内的块
这是在我写了我的申请卡后发生的。在写入之前,块很好(可以读取)
那么,是什么导致了这个问题?是什么导致NXP TagInfo中的“全零键”和“未知键”错误?
这些并不是真正的错误。这只是告诉您,NXP TagInfo无法读取扇区,因为它不知道(“未知密钥”)对扇区1进行身份验证所需的密钥
是什么原因导致该行业无法阅读?
最明显的原因是,您正在使用的卡已经包含了一些使用非标准密钥保护的数据(出厂默认密钥、NDEF密钥或NXP TagInfo默认测试的任何其他密钥。在这种情况下,您的应用程序首先将无法写入该卡的扇区1
然而,既然你指出
这是在我用我的应用程序写卡片之后发生的。在写之前,块是好的(可以读取)
我假设您的应用程序写入扇区1的最后一个块(块7)。每个扇区的最后一个块是扇区尾部。该块包含该块的访问控制信息(身份验证密钥A和B以及访问位)。该块的格式如下:
XX XX XX XX XX XX ZZ ZZ ZZ GG YY YY YY YY YY YY
其中,XX XX XX XX XX XX
(6字节)是键A,YY YY YY YY
(6字节)是键B,ZZ ZZ
(3字节)是访问条件,GG
(1字节)是通用字节
因此,如果覆盖此块,则会更改该扇区的身份验证密钥和访问条件。因此,如果向该块写入了新的身份验证数据(新的密钥a/B和新的访问位),则需要将更新后的信息用于将来的身份验证尝试
但是,如果您将部分数据写入该块,则很可能将访问位设置为无效值。在这种情况下(访问位包含无效值),整个扇区将永久性地变得不可用。作为一项安全功能,MIFARE CLassic卡将阻止访问具有无效访问条件的扇区。一旦扇区处于该状态,它将无法恢复
关于拖车挡块和访问位,另请参见以下问题:
在上述任一条件下,Accces位现在将为00…这将不可逆地锁定扇区。我可以用不同的密钥重置块吗?@VijayKumbhoje,这取决于。如果您已经用有效的访问条件覆盖了块,并且您知道您写入了拖车块的内容,则可以将这些字节作为新密钥。如果您向访问位写入了一些无效值,则否,扇区永久不可用。无法重置此值。