0

私はJavaで相互認証を行おうとしていますが、これが私がやっていることです:

まず、チャレンジを要求して乱数を取得します。

TRX --> 0084000008
REC <-- 4E621D238C8B185F 9000 

次に、キー シード、enc、mac のすべてを計算し、相互認証コマンドを送信します。

TRX --> 0082000028[seed enc mac ... bytes transformed]00
REC <-- 6A88

私は常に 0x6A88 を受け取りますが、インターネットで「参照データまたは参照データが見つかりません」という意味であることがわかりました。

しかし、奇妙なことに、すでに C# で動作しているコードを Java に実装することを得意としており、それを一緒にテストし、キーを使用して同じデータを取得するなどしたところ、相互認証 ( 0x82) コマンドで 0x6A88 エラーが発生しました。

ここにいくつかのソース コードがあります。beginExclusive() と endExclusive() を使用して、または使用せずに試してみましたが、うまくいきませんでした。

public CardTerminal getCardTerminal() throws Exception {
    CardTerminal ct = null;
    TerminalFactory terminalFactory = TerminalFactory.getDefault();        
    CardTerminals cardTerminals = terminalFactory.terminals();
    // Searches for first card terminal available on the PC
    if (cardTerminals.list().isEmpty() == false) {
        ct = cardTerminals.list().get(0);
    }
    return ct;
}

public void test() throws Exception {
    CardTerminal cardTerminal;
    Card card;
    MyManager instance;

    cardTerminal = getCardTerminal(); 
    instance = new DpiV2Manager();

    card = cardTerminal.connect("T=1");
    card = connect(cardTerminal);
    card.beginExclusive();
    CardChannel cardChannel = card.getBasicChannel();

    // Inside this method I do the get challange, mutual auth, etc
    instance.readGeneralData(cardChannel); 

    card.endExclusive();
    card.disconnect(true);
}

相互認証を行うJavaで同じ問題が発生した人はいますか?

誰かが解決策を見つけましたか?

4

1 に答える 1