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)
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
Vous devez vous connecter pour publier un commentaire.
Dans Mifare Classic 1K tags Il y a 16 Secteurs et chacun des Secteurs contient 4 Blocs et chaque bloc contient 16 octets.
Avant la Lecture ou l'écriture d'une page, Vous devez avoir à s'Authentifier Le Secteur de l'aide de la Touche A ou la Touche B. Lorsque l'Authentification est terminée, alors vous pouvez lire ou écrire.
Voici la Commande d'Authentification
Authentifier le secteur 0 à l'aide de la clé en tant que clé (60):
Ou d'authentifier le secteur 0 à l'aide de la clé en tant que clé B(61):
ou à l'aide de cette commande, vous pouvez également authentifier le secteur 0
Lorsque l'Authentification est d'avoir du succès, alors vous obtiendrez 90 00. C'est le message de Réussite. D'autre réponse est de 63 00 , cela signifie que l'authentification a échoué.
Lorsque l'Authentification complète alors que vous pouvez lire en bloc (0,1,2,3) cause le secteur 0 contient 4 blocs et ceux qui sont bloquer (0,1,2,3).
À l'aide de cette commande, Vous pouvez lire des données à partir du Secteur 0 bloc 1
Ici l'année dernière (byte) 0x01 bloc où vous voulez lire.
dans cette réponse vous pouvez trouver le code complet. Il suffit de remplacer la valeur de l'octet à l'aide de ce.
Merci.
OriginalL'auteur Md. Sajedul Karim