如何读取名称和基础数据等基本数据来自c#智能卡的地址?

时间:2015-07-21 09:55:42

标签: c# smartcard pcsc

我想从德国保险健康卡(例如K)读取基本数据,如姓名,地址等。 我有一个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();
    }

1 个答案:

答案 0 :(得分:1)

粗略的序列如下(我省略了扩展长度和访问权限):

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

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

sendbuffer必须包含命令APDU,i。即CLA,INS,P1,P2,[LC,data],[LE] 最简单的是,指定LE = 0,从那时起卡片尽可能地发送,你有一个想法,通过哪个值递增P1 / P2。

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