3

我想从德国保险健康卡 (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();
    }
4

1 回答 1

1

大致顺序如下(我省略了扩展长度和访问权限):

  • 选择合适的 DF
  • 选择文件 EF.PD
  • 发送在 P1/P2 中编码的偏移量增加的读取二进制命令序列

在下面的方括号中表示可选部分。

sendbuffer 必须包含命令 APDU,即 CLA、INS、P1、P2、[LC、data]、[LE] 最简单的方法是指定 LE=0,这样卡就尽可能多地发送,你有一个想法, 增加 P1/P2 的值。

答案包含 [data] SW1/SW2,因此至少应返回两个字节。如果你得到的更少,这可能表明你的命令格式错误并被 winscard 直接拒绝,而没有发送到卡。

于 2015-07-22T12:24:50.967 回答