我目前正在使用PIDION BIP-1300,有沒有人有如何檢索智能卡芯片的值的例子?EMV Pidion BIP 1300
我使用C#和BB_EMV.dll ......我無法找到任何文件...
這是那種我使用的是什麼樣的:
EMV emv = new EMV();
byte[] DE_5A;
DE_5A = emv.GetData("DE_5A");
所有我收到是一個滿零的字節數組。
在此先感謝!
我目前正在使用PIDION BIP-1300,有沒有人有如何檢索智能卡芯片的值的例子?EMV Pidion BIP 1300
我使用C#和BB_EMV.dll ......我無法找到任何文件...
這是那種我使用的是什麼樣的:
EMV emv = new EMV();
byte[] DE_5A;
DE_5A = emv.GetData("DE_5A");
所有我收到是一個滿零的字節數組。
在此先感謝!
ok我不知道BB_EMV是什麼,也從未聽說過它,但從智能卡讀取EMV數據並不容易,現在我會告訴你。
第一件事,你需要一個好的管理庫,可以讓你做到有問題的卡上的APDU級別的訪問權限,我用這一個:http://www.smartcard-api.com/index.shtml
一旦你的,一提到它添加,就像你會有其他託管的庫,還有樣本與工具包,所以我不打算詳細使用它,它並不難以讓您自己的代碼運行。
我有代碼,但它是我寫給客戶的版權,所以我不能給你。
一旦您開始向卡發送命令,並且如果卡是支持標準EMV結構的卡,您首先要做的就是選擇PSE,通常有兩種方式這個。
1)使用AID選擇
從AID的列表(應用程序ID的),你是準備接受發送以下命令將卡:
爲0x00,0xA4,0x04的0×00
由您要選擇的AID按照此,對於VISA借記這通常是
0XA0,0×00,0×00,0×00,×03,爲0x10,0x10的
這遵循上面作爲數據塊,隨後0x07的(數據長度)
你應當得到什麼或者是
0×9000或0x6100(如果得到61碼它意味着你必須重做APDU數據請求修改了參數,超出了我在這裏寫的範圍)
如果你在SW1中得到一個0xSW2(卡寄存器),那麼你已經成功地選擇了AID並準備好對它進行EMV呼叫。
2)使用DDF名稱來選擇所需要的支付應用程序,基本上使用的是標準卡選擇命令,選擇「1PAY.SYS.DDF01」如果它是一個接觸式芯片&針或「2PAY.SYS.DDF02」如果它非接觸式稱爲使用PPSE進行選擇。
一旦你選擇了一個支付應用程序,你需要從卡上讀取處理選項,這會告訴你一些關於什麼可用以及在哪裏查找的信息。
這是通過發出讀取GPO命令,看起來像做了以下內容:
0x80的,0xA8,0×00,0×00,0×83,0×00
這將返回一個TLV結構,你必須解析細節。
TLV是一個非常簡單的概念,數據流被分成3組,一個
TAG
LENGTH
和
VALUE
因此TLV,
TLV標籤之間可以是可變長度1和3個字節長,通常你看不到超過2個字節。如果與0x1F的相與你的第一個字節是大於31,(即第6位或7集),那麼你有一個16位的標籤,在這種情況下,你需要把你剛剛收到轉變它留下了8位字節,然後添加序列中的下一個字節。
像明智的下一個字節是否安定它由128給你128則有1個到15比特之間的2字節長度,只要掌握標記和長度的下一個長度剩餘的字節是有效負載。
該有效載荷可以被嵌套,其實你很可能會發現TLV結構中的TLV結構,所以一個好的遞歸解析器將需要被寫入。
解析完GPO對象的數據後,可以使用它來查找實際的卡數據,這是您開始讀取PAN和track2等效數據的地方,但請注意,儘管存在不是所有的標準都是100%相同的。大多數卡有一個自定義的數據區域,還要注意PIN & CVV號碼不能直接從卡上,而不是你會發現什麼是,在大多數情況下,會有一個加密的PIN碼或CVV塊,這樣的設計被送到從卡中發回適當的證書,然後發行人將報告輸入的密碼是否正確。
有些卡可以離線驗證PIN碼,但是wolfgang rankels網站充滿了一些可用的各種標準功能和數據通話的大量信息,主要是在GSM SIM卡上,但他確實涵蓋EMV也可以找到他網站瀏覽:
有一個巨大的數額更比我這裏描述的這個問題上,這是冰山的一角,但是因爲你張貼了這個超過6個月前,我猜你現在可能已經取得了一些進展,如果不是,那麼我希望這會有所幫助。