2015-10-29 112 views
-1

我正在嘗試使用基於主機的卡模擬來開發和Android應用程序,並對APDU消息感到困惑。如何創建APDU消息

我一直試圖遵循幾個例子(底部2),但仍然不知道如何格式化我自己的APDU消息。我正在開發HCE應用程序和閱讀器應用程序,所以我認爲這兩方面都需要完成。

有了零售商店會員卡的例子,會員號碼需要跨越,如何創建APDU消息?所有APDU命令/響應對

http://www.slideshare.net/ChienMingChou/hce-tutorialv-v1 http://www.javaworld.com/article/2076450/client-side-java/how-to-write-a-java-card-applet--a-developer-s-guide.html?page=3

回答

1

首先 - 只是二進制字節的塊,除了有時使用密碼術沒有任何魔法。

要了解APDU命令和響應,請看一看到ISO 7816規格:

  • 第3部分:描述APDU命令,Responces內容和課程
  • 4部分:(和其他幾個)介紹基本命令。

要了解支付卡你應該看看EMV規格更深。

不能說這裏提到的規格很容易理解,但是如果你覺得自己有強大的開發能力,那麼這個規範會更好地知道或保存在你的手中,以作澄清和最佳實踐。

請注意,卡製造商可以實現自己的APDU命令以及Java卡應用程序。在這種情況下,您應該查看特定的卡或卡應用手冊。

您的零售店卡可能會使用來自ISO或卡製造商的標準APDU或實施自己的(javacard)命令。如果不查看零售卡規格或分析APDU痕跡,就很難說出命令的真正用處。

0

只需使用APDU命令創建一個字符串,通過函數將其轉換爲字節數組並將其返回。沒有瘋狂。

這裏是去/從字符串/字節[]的函數。

public static String byteArrayToHex(byte[] bytes) { 
    StringBuilder sb = new StringBuilder(); 
    for (byte b : bytes) { 
     sb.append(String.format("%02X", b)); 
    } 
    return sb.toString(); 
} 

public static byte[] hexToByteArray(String hexString) { 
    int len = hexString.length(); 
    byte[] data = new byte[len/2]; 
    for (int i = 0; i < len; i += 2) { 
     data[i/2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4) 
       | Character.digit(hexString.charAt(i + 1), 16)); 
    } 
    return data; 
} 

至於發送一個會員號您的具體使用情況下,我不知道該命令的格式,但是如果你有串將是什麼樣子,在這裏使用的效用函數的格式來構建它們。