如何读取基本数据,如名称&用c#从智能卡获取地址
本文关键字:地址 获取 智能卡 何读取 读取 数据 | 更新日期: 2023-09-27 18:03:58
我想从德国保险健康卡(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,即CLA, INS, P1, P2, [LC, data], [LE]最简单的方法是指定LE=0,因为这样卡片就会发送尽可能多的东西,并且你有一个想法,通过哪个值来增加P1/P2。
答案包含[data] SW1/SW2,因此至少应该返回两个字节。如果您得到的值较低,这可能表明您的命令格式不正确,并且没有被发送到卡,而是被winscard直接拒绝了。