相关疑难解决方法(0)

使用SCL010获取Mifare Ultralight的UID

我想获得Mifare Ultralight NFC标签的UID.在Java中我有这个代码:

TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
System.out.println("Terminals: " + terminals);

CardTerminal terminal = terminals.get(0);

Card card = terminal.connect("*");
System.out.println("card: " + card);
CardChannel channel = card.getBasicChannel();

ResponseAPDU answer = channel.transmit(new CommandAPDU(0xFF, 0xCA, 0x00, 0x00, 0x00));
byte[] uid = answer.getBytes();
Run Code Online (Sandbox Code Playgroud)

问题是我收到两个字节而不是UID.有什么问题?APDU是否正确?

java apdu nfc smartcard-reader mifare

7
推荐指数
2
解决办法
7400
查看次数

使用javax.smartcardio从mifare classic中读取块

我想使用Java的javax.smartcardio阅读关于Mifare classic的特定块.这是我的代码:

public byte[] getCardUID() throws CardException {
    CardTerminals terminals = TerminalFactory.getDefault().terminals();
    terminal = terminals.list().get(0);
    Card card = terminal.connect("*");
    CardChannel channel = card.getBasicChannel();
    CommandAPDU command = new CommandAPDU( new byte[] { (byte) 0xFF, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x04, (byte) 0xD4, (byte) 0x4A, (byte) 0x01, (byte) 0x00 });
    ResponseAPDU response = channel.transmit(command);
    card.disconnect(true);
    if (response.getSW1() == 0x90) {
        byte[] data = response.getData();
        data = Arrays.copyOfRange(data, 0x08, data.length);
        return data;
    }
    return new byte[] {};
}
Run Code Online (Sandbox Code Playgroud)

这个方法(在互联网上找到的样本)成功读取卡的UID,但是当我尝试构建自己的命令时,我总是变成错误SW1 = 63. …

java mifare

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×2

mifare ×2

apdu ×1

nfc ×1

smartcard-reader ×1