簡體   English   中英

javax.smartcardio案例4 APDU消失-6700響應-警告

[英]javax.smartcardio case 4 APDU vanishing - 6700 response - warning

使用javax.smartcardio類進行智能卡編程時,我遇到了持續的錯誤-當代碼看起來不錯時,從卡上取回6700(無效長度)和類似的錯誤代碼。 示例代碼:

    req = new CommandAPDU(0x00, 0xA4, 0x04, 0x00, aid, 0x00);

應該構造一個案例4 APDU。 為什么卡片會好像我丟失了什么東西一樣做出反應?

  req = new CommandAPDU(0x00, 0xA4, 0x04, 0x00, aid, 0x00); 

應該構造一個案例4 APDU。 為什么卡片會好像我丟失了什么東西一樣做出反應?

簡短答案

使用aid, 0x100代替aid, 0x00

長答案(最好喝杯咖啡):

那是因為NeLe之間的混淆。 Ne是可以返回到終端的最大字節數。 Ne是一個沒有具體表示的數字。 但是LeNe編碼以字節單位表示形式

現在,對於ISO / IEC 7816-4,有一個小技巧:如果沒有響應數據(RDATA)的ISO情況1或3命令,則Le不存在(無字節)。 因此將Le = 00定義為“無響應數據”是虛假的。 相反,7816-4使用Le = 00表示Ne = 256 類似地, Le = 0000 (或Le = 000000 )表示Ne = 65536 ,即2 ^ 16。 雙字節和三字節編碼僅用於擴展長度的APDU。

如您在CommandAPDU構造函數中所見,您必須指定Ne ,而不是Le 因此,您指定的內容與說沒有響應數據相同。 因此,APDU無法正確解釋為ISO情況4,並且命令將失敗(在這種情況下,正確的是6700正是您所期望的)。

因此,只需指定所需的字節數即可。 如果該值大於256,則將需要擴展長度的APDU(或命令鏈接,但這本身就是一個主題)。 當然不支持Ne < 0Ne > 64Ki


請注意, 包括Java Card API在內的許多協議描述都 NeLe分為錯誤(順便說一句 ,這已在Java Card API v3.0.5中修復 )。 這很奇怪,因為7816-4存在許多問題,但這不是其中之一。 它被明確指定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM