收藏 分享(赏)

SM7操作流程收.doc

上传人:精品资料 文档编号:8352028 上传时间:2019-06-21 格式:DOC 页数:3 大小:41KB
下载 相关 举报
SM7操作流程收.doc_第1页
第1页 / 共3页
SM7操作流程收.doc_第2页
第2页 / 共3页
SM7操作流程收.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、SM7 卡片操作方法1. ISO14443 typaA 卡片寻卡,防冲突,选卡操作1.1 request 寻卡SM7 卡片返回值:0x031.2 Anti-collision 防冲突SM7 卡片返回值:UID 卡号1.3 Select 选卡操作SM7 卡片返回值:0x082. SM7 卡片认证2.1 获取随机数 (1)第一次进行认证操作时发送 2 个字节(认证指令 0x71,认证参数) (具体参数见下表)认证 key 编号 认证参数0 0x071 0x062 0x053 0x044 0x275 0x266 0x257 0x24TXCRC:onRXCRC:off卡片返回值: 4 字节随机数(例:

2、D3 4A 42 71)(2)如果之前已经完成认证操作,再次进行认证操作时发送的 2 个字节(认证指令0x71,认证参数)需要使用之前认证生成的密码流进行异或加密。TXCRC:onRXCRC:off卡片返回值: 4 字节随机数(例:D3 4A 42 71) ,注意此时返回的随机数为明文,同时之前认证生成的密码流停止使用,待本次取得的随机数通过 PSAM 卡计算新的Token1。2.2 Authentication1(1)PSAM 卡指令:80 F0 00 01 0C + random data + 11 22 33 44 55 66 77 88,注 1:80 F0 00 01 0C 中 P2=

3、01 为 PSAM 卡片密钥标识注 2:此处 11 22 33 44 55 66 77 88 为 SM7 卡片密钥分散因子(2)PSAM 卡返回:8 字节 Token1 + SW(90 00)(3)非接触读卡器发送 8 字节 Token1TXCRC:onRXCRC:off卡片返回值: 8 字节 Token2(例:CA B9 A4 EC E0 64 74 99)2.3 Authentication2卡片返回的 Token2 发送给 psam 卡验证,如果验证通过 PSAM 卡返回 16 字节初始密钥流+SW(90 00)2.4 计算密码流PSAM 卡指令:80 1C 00 00 10卡片返回值:

4、 16 字节密码流3. SM7 卡片操作3.1 SM7 卡片读块(1)SM7 卡片指令: 0x30,块号参数。(2)SM7 卡片指令与密码流异或加密。(3)非接触读卡器发送 2 个字节密文。TXCRC:onRXCRC:on(4)SM7 卡片返回值: 16 字节块数据。(5)16 字节块数据与密码流异或解密得到数据明文。3.2 SM7 卡片写块(1)SM7 卡片指令: 0xA0,块号参数。(2)SM7 卡片指令与密码流异或加密。(3)非接触读卡器发送 2 个字节密文。 TXCRC:onRXCRC:off(4)SM7 卡片返回值: 半字节 ACK 数据(5)半字节 ACK 数据与密码流异或解密得到

5、数据明文 0xA。(6)SM7 卡片指令: 16 字节写块数据。(7)16 字节写块数据与密码流异或加密。(8)非接触读卡器发送 16 个字节密文。 TXCRC:onRXCRC:off(9)SM7 卡片返回值: 半字节 ACK 数据(10)半字节 ACK 数据与密码流异或解密得到数据明文 0xA。4. SM7 卡片异或加密与解密(1) 判断当前密码流长度(按半字节数组长度计算)是否足够支持本条指令操作,读块需要 18,写块需要 19。如果长度不够,按照 2.4 计算密码流方法计算密码流。(2) 密码流每个字节按照低四位在前高四位在后的方式,拆成半字节数组。例如:0x73,0x59,0xB2,0

6、x16,0x3E,0x4E,0xDC,0x58拆成:0x3,0x7,0x9,0x5,0x2,0xB,0x6,0x1,0xE,0x3,0xE,0x4,0xC,0xD,0x8,0x5例:for( i = 0;i+;i To input_len)half_byte(i * 2) = input_data(i) /低位for( i = 0;i+;i input_len)half_byte(i * 2 + 1) = (input_data(i) /高位(3) 需要加密或解密的数据同样按照低四位在前高四位在后的方式,拆成半字节数据数组。密码流长度减去本次计算使用的数据长度。半字节密码流数组首地址后移本次计

7、算使用的数据长度。例:token_halfbytelength = token_halfbytelength - command_halfbytelength;/密码流长度减去数据的长度 4for(i = 0;i+; i token_halfbytelength)token_halfbyte(i) = token_halfbyte(i + command_halfbytelength);/密码流数组首地址向后偏移数据的长度(4) 将半字节密钥数组与半字节数据数组异或操作,得到的半字节数组按照低四位在前高四位在后的方式组合后得到加密或解密的结果。例:for( i = 0;i+;idata_len)halfbyte_data(i) = halfbyte_data(i) token_halfbyte(i);/半字节数据数组与半字节密码流数组异或运算for( i = 0;i+;i To inputdata_length)output_data(i) = halfe_byte(i * 2) + (halfe_byte(i * 2 + 1) * 16);/半字节数据数组组合为字节数组

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报