Desfire卡创建应用、更改密钥、新建文件、读写文件流程
本示例使用的发卡器https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.47b32c1bu5KZDwfttid917152255720status cpurequest1(mypiccserial(0), myparam(0), myver, mycode, AtqaSak(0)) 激活卡片 If status 0 Or status 52 Then If ((AtqaSak(0) \ 64) 0) Then status desfireselectapplication(aid(0), retsw(0)) 查询卡内是否有 系统设置的应用 strls Right(0 Hex(retsw(0)), 2) Right(0 Hex(retsw(1)), 2) If status 0 And (strls 9100 Or strls 9000) Then status desfireauthkeyev1(DesfireKeyB(0), 1, 1, retsw(0)) 有系统设置的应用核对应用的读写密钥 strls Right(0 Hex(retsw(0)), 2) Right(0 Hex(retsw(1)), 2) If status 0 And (strls 9100 Or strls 9000) Then status desfirereaddata(HBD, 1, 0, 20, databuf(0), retsw(0)) 读取文件内数据 strls Right(0 Hex(retsw(0)), 2) Right(0 Hex(retsw(1)), 2) If status 0 And (strls 9100 Or strls 9000) Then doublecardhao CDbl(databuf(8)) doublecardhao doublecardhao CDbl(databuf(9)) * 256 doublecardhao doublecardhao CDbl(databuf(10)) * 65536 doublecardhao doublecardhao CDbl(databuf(11)) * 16777216 answ MsgBox(卡内现有卡号是 Format(doublecardhao, 0000000000) 是否要更改, vbQuestion vbOKCancel, 注意) If answ vbOK Then status desfirewritedata(H3D, 1, 8, 4, mypiccdata(0), retsw(0)) 将卡号写入文件 strls Right(0 Hex(retsw(0)), 2) Right(0 Hex(retsw(1)), 2) If status 0 And (strls 9100 Or strls 9000) Then pcdbeep 30 ListAddItem 卡号 Trim(Text1.Text) 写入成功 Text1.SetFocus Else ListAddItem 写卡号返回代码 Trim(Str(status)) 卡片返回代码 strls RetTextFromStr(strls) End If End If Else ListAddItem 读取文件数据返回代码 Trim(Str(status)) 卡片返回代码 strls RetTextFromStr(strls) End If Else ListAddItem 应用认证密钥返回代码 Trim(Str(status)) 卡片返回代码 strls RetTextFromStr(strls) End If Else keysetting 11 status desfirecreateapplication(aid(0), keysetting, 4, 1, retsw(0)) 创建新应用 strls Right(0 Hex(retsw(0)), 2) Right(0 Hex(retsw(1)), 2) If status 0 And (strls 9100 Or strls 9000) Then status desfireselectapplication(aid(0), retsw(0)) 选择新应用 strls Right(0 Hex(retsw(0)), 2) Right(0 Hex(retsw(1)), 2) If status 0 And (strls 9100 Or strls 9000) Then status desfireauthkeyev1(DesfireKeyA(0), 0, 1, retsw(0)) 认证新应用主控密钥 strls Right(0 Hex(retsw(0)), 2) Right(0 Hex(retsw(1)), 2) If status 0 And (strls 9100 Or strls 9000) Then status desfirechangekeyev1(DesfireKeyB(0), 1, 1, 0, DesfireKeyA(0), retsw(0)) 更改新应用1号密钥 strls Right(0 Hex(retsw(0)), 2) Right(0 Hex(retsw(1)), 2) If status 0 And (strls 9100 Or strls 9000) Then status desfirechangekeyev1(DesfireKeyB(0), 0, 1, 0, DesfireKeyA(0), retsw(0)) 更改新应用0号密钥 strls Right(0 Hex(retsw(0)), 2) Right(0 Hex(retsw(1)), 2) If status 0 And (strls 9100 Or strls 9000) Then status desfireauthkeyev1(DesfireKeyB(0), 0, 1, retsw(0)) 认证新应用的新主控密钥 strls Right(0 Hex(retsw(0)), 2) Right(0 Hex(retsw(1)), 2) If status 0 And (strls 9100 Or strls 9000) Then accessrights(1) 17 accessrights(0) 17 status desfirecreatestddatafile(1, 0, accessrights(0), 64, retsw(0)) 创建新文件 strls Right(0 Hex(retsw(0)), 2) Right(0 Hex(retsw(1)), 2) If status 0 And (strls 9100 Or strls 9000) Then status desfireauthkeyev1(DesfireKeyB(0), 1, 1, retsw(0)) 认证文件的读写密钥 strls Right(0 Hex(retsw(0)), 2) Right(0 Hex(retsw(1)), 2) If status 0 And (strls 9100 Or strls 9000) Then status desfirewritedata(H3D, 1, 8, 4, mypiccdata(0), retsw(0)) 将卡号写入文件 strls Right(0 Hex(retsw(0)), 2) Right(0 Hex(retsw(1)), 2) If status 0 And (strls 9100 Or strls 9000) Then pcdbeep 30 ListAddItem 卡号 Trim(Text1.Text) 写入成功 Text1.SetFocus Else ListAddItem 写卡号返回代码 Trim(Str(status)) 卡片返回代码 strls RetTextFromStr(strls) End If Else ListAddItem 认证文件的读写密钥返回代码 Trim(Str(status)) 卡片返回代码 strls RetTextFromStr(strls) End If Else ListAddItem 创建新文件返回代码 Trim(Str(status)) 卡片返回代码 strls RetTextFromStr(strls) End If Else ListAddItem 认证应用的新主控密钥返回代码 Trim(Str(status)) 卡片返回代码 strls RetTextFromStr(strls) End If Else ListAddItem 更改新应用0号密钥返回代码 Trim(Str(status)) 卡片返回代码 strls RetTextFromStr(strls) End If Else ListAddItem 更改新应用1号密钥返回代码 Trim(Str(status)) 卡片返回代码 strls RetTextFromStr(strls) End If Else ListAddItem 新应用密钥认证返回代码 Trim(Str(status)) 卡片返回代码 strls RetTextFromStr(strls) End If Else ListAddItem 选择新应用返回代码 Trim(Str(status)) 卡片返回代码 strls RetTextFromStr(strls) End If Else ListAddItem 创建新应用返回代码 Trim(Str(status)) 卡片返回代码 strls RetTextFromStr(strls) End If End If Else ListAddItem 此卡不是Desfire卡卡片参数 Right(00 Hex(myparam(0)), 2) - Right(00 Hex(myparam(1)), 2) - Right(00 Hex(myparam(2)), 2) - Right(00 Hex(myparam(3)), 2) 版本 Right(00 Hex(myver), 2) End If Else ListAddItem 读卡失败错误代码 Trim(Str(status)) status_to_info(status) End If