我目前正在使用PIDION BIP-1300,有没有人有如何检索智能卡芯片价值的例子?
我正在使用C#和BB_EMV.dll ...我找不到任何文档......
这就是我正在使用的东西:
EMV emv = new EMV();
byte[] DE_5A;
DE_5A = emv.GetData("DE_5A");
我收到的是一个充满零的字节数组。
提前致谢!
答案 0 :(得分:3)
好吧我不知道BB_EMV是什么,从未听说过,但从智能卡读取EMV数据并不容易,我现在就告诉你。
首先,您需要一个良好的托管库,可以让您对相关卡片进行APDU级别访问,我使用这个:http://www.smartcard-api.com/index.shtml
有了它之后,就像添加任何其他托管库一样添加对它的引用,有套件的示例,所以我不打算使用它来详细说明,运行自己的代码并不困难
我有代码,但它是我所写的客户版权所以我不能给你。
一旦你开始向卡片发送命令,并且它是一张支持标准EMV结构的卡片,你要做的第一件事就是选择PSE,通常有两种方法可以做到这一点
1)使用AID选择
从您准备接受的AID(应用程序ID)列表中,将以下命令发送到该卡:
0x00,0xA4,0x04,0x00
按照您希望选择的AID进行此操作,对于VISA借记,这通常是
0xA0,0x00,0x00,0x00,0x03,0x10,0x10
这遵循上面的APDU数据作为数据块,后跟0x07(数据长度)
你应该得到的是
0x9000或0x6100(如果您获得61代码,则意味着您必须使用修改后的参数重做请求,超出我在此处所写的范围)
如果你在SW1&中得到0x9000 SW2(卡寄存器)然后您已成功选择该AID并准备好对其进行EMV呼叫。
2)使用DDF名称选择所需的支付应用程序,基本上你使用标准卡片选择命令选择“1PAY.SYS.DDF01”,如果它是一个接触芯片& pin或“2PAY.SYS.DDF02”如果它是非接触式的,则称为使用PPSE进行选择。
选择付款应用后,您需要从卡中读取处理选项,这将告诉您有关可用内容和查看位置的一些信息。
这是通过发出如下所示的读取GPO命令来完成的:
0x80,0xA8,0x00,0x00,0x83,0x00
这将返回一个TLV结构,您必须解析其中的详细信息。
TLV是一个非常简单的概念,您的数据流分为3组标签
LENGTH
和
VALUE
因此TLV,TLV标记可以是1到3个字节长的可变长度,通常虽然您看不到大于2个字节。如果你的第一个字节与0x1F一起大于31(即设置了第6位或第7位),那么你有一个16位标签,在这种情况下你需要把你刚收到的字节移位8位,然后添加序列中的下一个字节。
与下一个字节类似,如果用128和它给你128,那么你有1到15位的2字节长度,一旦你有TAG和长度,下一个长度剩余字节就是有效载荷。
有效负载可以嵌套,实际上你很可能在TLV结构中找到TLV结构,因此需要编写一个好的递归解析器。
在您从GPO对象解析数据后,您可以使用它来查找实际的卡数据,这是您开始阅读PAN和track2等效数据之类的内容请注意,尽管有标准并非所有这些都是100%完全相同。大多数卡都有自定义数据区,还要注意PIN& CVV号码不是直接从卡上获得的,而是您会发现在大多数情况下会有一个加密的PIN或CVV块,这是设计用于发送回发行版以及来自卡的相应证书,然后,发行人将报告输入的引脚是否正确。
有些卡可以进行离线PIN验证,但是,沃尔夫冈等级网站上充满了各种标准功能和数据通话的绝佳信息,主要是在GSM SIM卡上,但他确实覆盖了EMV,你可以找到他的网站在这里:
这个主题比我在这里描述的还要多,这只是冰山一角,但是自从你在6个月前发布这个以来我估计你可能已经取得了一些进展到现在为止,如果没有,那么我希望这会有所帮助。