3

ACR122 NFC リーダーがあり、Apple Pay によって生成されたトークンを読み取れるかどうかを確認しようとしています。以下は私が試しているJavaのコードですが、毎回4つの英数字しか返しません。Apple Pay iphone は nfc リーダーを感知します - トークンを取得するために送信する必要がある特定の apdu コマンドはありますか?

import java.io.*;
import java.util.*;
import javax.smartcardio.*;

public class CardTest {

  final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();

  public static String bytesToHex(byte[] bytes) {
    char[] hexChars = new char[bytes.length * 2];
    int v;
    for ( int j = 0; j < bytes.length; j++ ) {
      v = bytes[j] & 0xFF;
      hexChars[j * 2] = hexArray[v >>> 4];
      hexChars[j * 2 + 1] = hexArray[v & 0x0F];
    }
    return new String(hexChars);
  }

  public static void main(String[] args) throws Exception {
    TerminalFactory factory = TerminalFactory.getInstance("PC/SC", null);
    System.out.println(factory);

    List<CardTerminal> terminals = factory.terminals().list();
    System.out.println("Terminals: " + terminals);
    if (terminals.isEmpty()) {
      throw new Exception("No card terminals available");
    }

    CardTerminal terminal = terminals.get(0);

    // Keep looping looking for cards until the application is closed
    while( true )
    {
      terminal.waitForCardPresent( 0 );
      try {
        Card card = terminal.connect("*");
        CardChannel channel = card.getBasicChannel();

        CommandAPDU command = new CommandAPDU(new byte[]{(byte)0xFF,(byte)0xCA,(byte)0x00,(byte)0x00,(byte)0x04});
        ResponseAPDU response = channel.transmit(command);

        byte[] byteArray = response.getBytes();
        System.out.println( bytesToHex( byteArray ) );
        Thread.sleep(1000);
      } catch (CardException e) {
        e.printStackTrace();
      }
    }
  }
}
4

1 に答える 1

4

発行するコマンド

FF CA 00 00 04

iPhoneのスマートカード(セキュアエレメント)の衝突防止識別子(4バイト以上の場合は実際には最初の4バイト)を取得します。

Apple Pay (非接触インターフェース経由) は、非接触決済カードの EMV 標準を実装しています。したがって、その非接触 EMV 支払いカードと通信するには、そのプロトコルを実装する必要があります。

ところで。支払いトークンをバイト列と考えないでください。それ以上です。EMV 支払いトークンは、

  • 一時的な「クレジットカード番号」(等)と取引認証を生成するために使用されるキー(→これは通常、Google ウォレットなどの HCE アプリケーションで使用されます)

  • リンクされたクレジットカードから後で差し引かれる支払いを承認するために使用される恒久的な支払いカード (別個だが固定のクレジットカード番号、有効期間、秘密鍵など) (-> これは Apple Pay で使用されるようです --また、セキュア エレメント ベースの Google ウォレットでも使用されていました)。

于 2014-11-04T23:12:57.303 に答える