La lecture de bloc de mifare classic à l'aide de javax.smartcardio

Je voudrais lire un bloc spécifique sur Mifare classic à l'aide de Java javax.smartcardio.
Voici mon code:

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[] {};
}

Cette méthode (échantillon trouvé sur internet) lit correctement l'UID de la carte, mais quand j'essaie de construire mon propre commande, j'ai toujours l'erreur SW1=63.

Sur ce site (http://www.acs.com.hk/drivers/eng/API_ACR122U_v2.00.pdf), j'ai trouvé quelques informations sur l'APDU, mais rien ne fonctionne et je ne trouve pas pourquoi.
J'ai essayé la commande suivante sans succès (toujours l'erreur 63):
FF B0 00 04 10 (B0 - lecture binaire bloc, 04 - numéro de secteur, à 10 lire 16 octets). J'ai aussi essayé de lire un seul octet, la lecture de la valeur du bloc (INS B1), mais également sans succès.

FF 00 00 00 ... (dans mon exemple) doit être directement transmettre, mais je ne sais pas instructions suivantes pour la lecture d'un bloc.

Quelqu'un peut m'aider? Merci beaucoup.
(Désolé pour mon anglais)

Vous êtes en fait en utilisant un ACR122U, droit?
Oui, je ne suis pas sûr à 100% parce que je n'ai pas installé ce pilote, mais je pense que je suis en utilisant acr122u. Btw. mon lecteur est touchatag.
Ok, autant que je sache, vous devriez être en mesure d'utiliser ces propriétaires des unités apdu de parler à votre mifare, de sorte que vous devrait en principe être en mesure de le faire à l'aide de javax.smartcardio. Peut-être que le trafic va le SAM internes de la carte à puce au lieu de la carte mifare? Si vous ouvrez votre lecteur, contient-il un contact de la carte à puce?
J'ai pensé, qu'il devrait être possible à cause de succesfull UID lecture. Je ne vois aucun tournevis sur mon lecteur et honnêtement, je préfère laisser mon lecteur non ouvert. J'ai essayé de trouver quelques détails techniques, mais sans succès. En théorie, si la redaer a un SAM internes de la carte à puce, ce qui signifie-t-il et quelle est la différence dans la communication?
Donc, j'ai découvert que dans mon lecteur est un contact de la carte à puce qui ressemble à une carte SIM dans un téléphone mobile.

OriginalL'auteur | 2012-08-17