我正在开发一款适用于Android的APP来阅读一些NFC卡(mifare 1k或512)。
他们的应用程序不是关键任务:它们内部只有一个数字(不同于卡到卡),例如11001000015,11001000027等
与一位将对其进行编码的技术人员说,它表示这些卡可以保持写入/读取模式,将KeyA和KeyB从标准(通常是FF FF FF FF ...)更改为另一个更复杂的。
以这种方式,对于非关键范围,会造成一些损害的用户需要发现KeyA和KeyB,对此无用。
我怀疑如下:
1)在Android APP中,我是否需要指定新密钥才能只读取标签?或者它不重要?
如果对1的答案为否,那么只有当我写一个APP到WRITE / OVERWRITE标签时,是否需要指定一个新的密钥?
2)是否可以读取密钥,并验证是否正确?
3)Tech说让我使用512.它们更兼容更多的智能手机(S3,S4,S5),S4例如不读取1k。
答案 0 :(得分:1)
应用程序可能只是使用卡的唯一标识符或UID,正如史密斯先生所说。 UID是在制造卡片时设置的,因此它们是独一无二且不可更改的。但是不要基于此构建安全应用程序,因为UID在某些设备中是可编程的。 所有NFC手机都可以读取UID,而不仅仅是三星。这是一个很大的优势,见下文。
您也可以选择将号码存储在MIFARE内存中。关于访问控制有很多灵活性:例如,您可以定义一个弱读取键(KeyB =默认FF FF FF ...),它可以存储在手机的应用程序中,而强写入键KeyA可以保密。你想要的(无论如何你应该阅读密钥派生)。通过使用访问控制位,您可以在某些条件下读取KeyB。
问题在于只有少数手机可以读取MIFARE卡:只有那些拥有NXP制造的NFC芯片组的人,这是MIFARE技术的拥有者。它不依赖于内存大小(顺便说一句,我不知道任何MIFARE变体有512字节)。
答案 1 :(得分:0)
我认为可以在没有键(Tag.getId
)的情况下读取卡ID。您只需要钥匙即可写入或读取卡内容。