以其SAK表示响应。步骤14:如果UID完整,则PICC应发送带有清空的串联级别位的SAK,并从READY状态转换到ACTIVE状态。步骤15:PCD应检验SAK(选择确认)的串联比特是否被设置,以决定带有递增串联级别的进一步防冲突环是否应继续进行。如果PICC的UID是已知的,则PCD可以跳过步骤210来选择该PICC,而无需执行防冲突环。3密码验证。在进行读卡的操作前要对要进行操作的扇区进行密码验证操作,其函数实现如下:
charPcdAuthStateu
sig
edcharauth_modeu
sig
edcharaddr,u
sig
edcharpKeyu
sig
edcharpS
rcharstatusu
sig
edi
tu
Le
u
sig
edcharucComMF522BufMAXRLENucComMF522Buf0auth_modeucComMF522Buf1addrmemcpyucComMF522Buf2pKey6memcpyucComMF522Buf8pS
r6statusPcdComMF522PCD_AUTHENTucComMF522Buf12ucComMF522Bufu
Le
ifstatusMI_OKReadRawRCStatus2Reg0x08statusMI_ERRretur
status
验证对应扇区的KEYA是否与对应扇区的尾块中的KEYA相同,即三轮认证。MIFARE1卡(射频卡)的密码认证方式如图52所示
图52三次相互认证的令牌原理框图
详细的验证过程如下:A环:由MIFARE1卡片向读写器发送一个随机数据RB。B环:由读写器收到RB后向MIFARE1卡片发送一个令牌数据TOKENAB,其中包含了用读写器中存放的密码加密后的RB及读写器发出的一个随机数据RA。C环:MIFARE1卡片收到TOKENAB后,用卡中的密码对TOKENAB的加密的部分进行解密得到RB,并校验第一次由A环中MIFARE1卡片发出去的随机数RB是否与B第页(共页)
f环中接收到的TOKENAB中的RB相一致;若读写器与卡中的密码及加密解密算法一致,将会有RBRB,校验正确,否则将无法通过校验。D环:如果C环校验是正确的,则MIFARE1卡片用卡中存放的密码对RA加密后发送令牌TOKENBA给读写器。E环:读写器收到令牌TOKENBA后,用读写器中存放的密码对令牌TOKENBA中的RA随机数进行解密得到RA;并校验第一次由B环中读写器发出去的随机数RA是否与D环中接收到的TOKENBA中的RA相一致;同样,若读写器与卡中的密码及加密解密算法一致,将会有RARA,校验正确,否则将无法通过校验。如果上述的每一个环都为“真”,且都能正确通过验证,则整个的认证过程将成功。读写器将允许对刚刚认证通过的卡片上的这个扇区进入下一步的操作读写等操作。4读写操作。认证通过后即可进行读写操作
PcdRead4CardReadBuf4为数据块,是第一扇区的第0块PcdWrite4CardWriteBuf4为数据块,是第一扇区的第0块
详细的程序设计如下所示
charPcdReadur