我想从德国保险健康卡 (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();
}
最佳答案
大致顺序如下(我省略了扩展长度和访问权限):
- 选择合适的DF
- 选择文件EF.PD
- 发送一系列Read Binary命令,增加在 P1/P2 中编码的偏移量
在下面的方括号中表示可选部分。
sendbuffer 必须包含命令 APDU,i。 e. CLA、INS、P1、P2、[LC、数据]、[LE] 最简单的方法是指定 LE=0,从那时起卡会发送尽可能多的数据,您就会知道将 P1/P2 递增到哪个值。
答案包含[数据] SW1/SW2,因此至少应返回两个字节。如果你得到的更少,这可能表明你的命令格式不正确并被 winscard 直接拒绝,而没有发送到卡。
关于c# - 如何从 C# 中的智能卡读取名称和地址等基本数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31535827/