【发布时间】:2015-07-21 09:55:42
【问题描述】:
我想从德国保险健康卡 (egK) 中读取姓名、地址等基本数据。 我有一个 scm sdi011 读卡器,我使用 c#。 我已经从卡/读卡器获得了 ATR 字符串,但我不知道如何继续。 如果有人能告诉我现在该做什么就好了。
这是我的代码:
WinSCard card = new WinSCard();
try {
card.EstablishContext();
card.ListReaders();
string szReader = card.ReaderNames[1];
card.Connect(szReader);
string ATRStr = card.AtrString;
ATRBox.Text = ATRStr;
} catch (WinSCardException exception) {
richTextBox1.Text = exception.WinSCardFunctionName + " Error 0x" + exception.Status.ToString("X08") + ": " + exception.Message;
} finally {
card.Disconnect();
}
【问题讨论】:
-
您已经能够获得 ATR 让我觉得,您认为自己接近目标。不幸的是,这种情况并非如此。获取您感兴趣的一代的 eGK 规范(除了 ISO 7816-4),并检查数据的存储位置(EF.Personendaten)。这是很多工作,重要的细节不太可能在这里找到现成的。问题不在于 C#,而是具有特殊智能卡原理的一般命令序列。
-
我已经发现,我想要的数据存储在 EF.PD(或 EF.PSD)中——问题是我不知道如何读出这个存储。
-
文献推荐是 Rankl/Effing: Handbuch der Chipkarten 和 ISO 7816,第 4 部分,尤其是有关 SELECT、READ BINARY 的部分。之后,欢迎您带着具体问题回来。
-
好的,非常感谢。我现在读了很多关于这些东西的内容,但我没有得到的是如何构建 sendBuffer 以将 EF.PD 从 Card 中返回到 readBuffer 中。我像下面这样使用它: byte[] buffer3 = new byte[1];缓冲区3[0] = 0x00;字节 [] 发送缓冲区 = 缓冲区 3;字节[] responseBuffer = 新字节[0x256]; int 长度 = responseBuffer.Length; card.Transmit(sendBuffer, sendBuffer.Length, responseBuffer, 参考长度);但我什么也没得到(只有一个数字,其余的都是零)......