Bonjour tout le monde !
Jaimerais analyser un tag NFC iso14443b et comprendre comment cela fonctionne mais j’ai quelques soucis avec les CRC
Quand le tag est lu on peut voir certains CRC, mais si je veux modifier le contenu des données je dois etre capable de créer un checksum correspond aussi .. et la je bloque.. voici quelques exemples:
j’ai trouvé le code source de la norme iso14443b pour calculer ce checksum mais en C ... or je suis pas très doué avec ce langage. Je sais comprendre les grandes lignes mais je n’arrive pas a transposer ce code en Perl correctement .. tous mes essais ont été infructueux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 #db# Address=00, Contents=dbce0cd3, CRC=2cbc #db# Address=01, Contents=cc2b2edb, CRC=681c #db# Address=02, Contents=ffffffff, CRC=470f #db# Address=03, Contents=ffffffff, CRC=470f
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 void iso14443b_crc(uint8_t *pbtData, size_t szLen, uint8_t *pbtCrc) { uint32_t wCrc = 0xFFFF; do { uint8_t bt; bt = *pbtData++; bt = (bt ^ (uint8_t)(wCrc & 0x00FF)); bt = (bt ^ (bt << 4)); wCrc = (wCrc >> 8) ^ ((uint32_t) bt << 8) ^ ((uint32_t) bt << 3) ^ ((uint32_t) bt >> 4); } while (--szLen); wCrc = ~wCrc; *pbtCrc++ = (uint8_t)(wCrc & 0xFF); *pbtCrc = (uint8_t)((wCrc >> 8) & 0xFF); } /** * @brief Append CRC_B * */ void iso14443b_crc_append(uint8_t *pbtData, size_t szLen) { iso14443b_crc(pbtData, szLen, pbtData + szLen); }
Est ce que quelqu’un pourrait m’aider a le retranscrire en Perl svp ? avec des comments dans le code si possible ? =)
Thanks =)
Partager