java - MIFARE卡1k是否可以锁定命令,保护克隆或不可被其他应用程序擦除
问题描述
我想这样做是为了保护卡不被擦除或克隆卡。我读了很多文件有些告诉用户第四块设置读写权限..
根据@Michael Roland
MIFARE 卡的每个扇区的验证密钥和访问条件位于该扇区的最后一个块(扇区尾部)中。您可以使用常规写入命令使用新的访问条件和身份验证密钥更新此块。
扇区预告片如下所示:
+-----------------------------+--------------+----+-----------------------------+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
+-----------------------------+--------------+----+-----------------------------+
| Key A | Access Bits | GP | Key B |
| (6 bytes) | (3 bytes) | B | (6 bytes) |
+-----------------------------+--------------+----+-----------------------------+
因此访问位位于字节 6-8 中,如下所示:
+-------+-------+-------+-------+-------+-------+-------+-------+
| Bit 0 | Bit 1 | Bit 2 | Bit 3 | Bit 4 | Bit 5 | Bit 6 | Bit 7 |
+-------+-------+-------+-------+-------+-------+-------+-------+
Byte 6: | nC2_3 | nC2_2 | nC2_1 | nC2_0 | nC1_3 | nC1_2 | nC1_1 | nC1_0 |
+-------+-------+-------+-------+-------+-------+-------+-------+
Byte 7: | C1_3 | C1_2 | C1_1 | C1_0 | nC3_3 | nC3_2 | nC3_1 | nC3_0 |
+-------+-------+-------+-------+-------+-------+-------+-------+
Byte 8: | C3_3 | C3_2 | C3_1 | C3_0 | C2_3 | C2_2 | C2_1 | C2_0 |
+-------+-------+-------+-------+-------+-------+-------+-------+
Where nCx_y = not Cx_y and "C1_x, C2_x, C3_x" is the access condition for block x:
C1_3, C2_3, C3_3: sector trailer (block 3 in this sector)
C1_2, C2_2, C3_2: block 2 in this sector
C1_1, C2_1, C3_1: block 1 in this sector
C1_0, C2_0, C3_0: block 0 in this sector
我如何在我正在进行的项目中执行此操作
解决方案
你不能保护一张卡在她身上被复制。(在此技术上很容易应用暴力粗暴方法)
可以做的是所有块的哈希,包括您存储在卡上的 UID。在您的程序中,您只需将数据哈希与存储的哈希进行比较。
要在 python 中实现非常基本的哈希并将其存储在一个块中,您可以使用双伪随机:
def CRYPT_hashage(data,UID):
seed(str(data)+str(UID))
seed(random())
return str(random()).replace("0.","")[:8]
它可以防止在另一张卡上克隆。用户仍然可以修改自己的卡。但是您可以使用相同的技术散列“敏感”数据。
在这 2 种证券之后,它只留下了“自己克隆”技术,例如: - 你复制你的数据 - 你支付(用于无现金支付系统) - 你将你的旧数据粘贴到你的卡上)
防止它的唯一方法是仅使用卡的 UID 作为主键将所有数据存储在服务器上。
存在可以更改 UID 的卡。
推荐阅读
- sql - Oracle 优化 SQL 查询 - Multiple Max()
- excel - 如何使用 vba 代码自动将 Excel 表格数据范围自动填充到右侧
- excel - Tableau:如何在现有的 tableau 工作簿中加入新的数据源
- php - 如何将数据从源传递到模板函数?
- ckeditor - 如何在 Laravel 6 中使用 CKEditor 5?
- flutter - 如何在不破坏我的应用程序的情况下升级 Flutter
- css - 在图像中放置固定文本 - 使用引导程序响应
- highcharts - 如何使用 highcharts 制作圆环图?
- android - 带有 iroha 库的 Android 构建版本
- c++ - 如何在主函数之外创建对象?