智能卡上的内存如何工作以及如何访问数字行驶记录卡的唯一 ID

问题描述

对于我的第一次实习,我必须与欧洲行车记录仪阅读器一起做一些很棒的事情。

简而言之:我必须使用智能卡读卡器来读取接触式(不是无线电智能卡)ISO 7816 公司卡以读取该卡的唯一标识符。没有其他的。然后,我必须将该标识符与重置答案一起发送到其他地方,在那里对其进行处理、回答,然后一些数据上下交流。

没有代码,我必须在将来的某个地方构建包括服务器在内的所有内容。现在,我专注于卡片部分。我从头开始,并被要求为此使用 C#。我在 Linux 上使用 PCSC-lite 库,并且已经可以与卡进行通信。我能够获得重置代码的答案,并且能够用智能卡做一些其他的事情,这对我的问题并不重要。我还阅读了大部分 ISO 7816 数据表。尤其是那些对我来说似乎很重要的部分。我的代码读回响应并检查 sw1 和 sw2 是什么。所以我可以阅读调试信息。所以我想我至少已经涵盖了一些基础知识......

我是公司中唯一可以做这件事的人..或者应该能够做到这一点。我已经奄奄一息了。

有人可以在该领域有任何经验。请用简单的话向我解释:

1.这种卡上的内存是如何建立起来的

2.如何访问内存

3.哪些 APDU 以及以何种顺序发送它们以获取唯一的卡标识符(或指向我可以找到内存映射或其他内容的方向)

对于第一个问题,我的意思是:我知道数据结构似乎适用于我需要“选择”的 EF,而不是尝试使用正确的 apdu 提取数据。但我真的不明白它是如何工作的或内存结构是如何构建的。我已经阅读了 ISO 文件,但它们对我来说有点困难。也许如果我得到一些帮助,我会更好地理解他们。

对于第二个问题我具体的意思是:一般情况下,我应该发送什么Apdu,以什么顺序发送,以访问一块内存。

我已经阅读了很多关于该主题的堆栈溢出,但找不到适合我的答案。

如果你这么好心地回答我的问题,我将永远欠你的,你帮助了一个学生:)

  • 奥斯卡

解决方法

我不确定我是否理解您的问题(我使用智能卡工作多年)。在基于文件系统的智能卡上没有自由浮动的可用内存(与 SLE44 之类的愚蠢存储卡相反),您只能通过文件(在这种情况下为 EF)访问它。虽然原则上可以创建新文件,但现实生活中的卡片需要为此进行特定的身份验证,而您不太可能拥有这些文件的密钥。

哪些文件已经存在(以及哪些数据存储在哪个记录/偏移量/数据对象中)在规范中给出,在您的情况下,在找到 here 的规范之一中。使用的规范是必不可少的,因为卡本身可以支持许多应用程序,而行车记录仪只是其中之一。一旦知道数据在哪里,就必须创建相应的 SELECT / READ RECORD / READ BINARY 命令。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...