收藏
回答

微信小程序NFC M1卡交互密钥验证失败?错误码13017

前提,在安卓App上已经实现过了M1卡交互读写,在微信小程序中的密钥是正确的,一直验证失败,卡没问题,密钥没问题,卡片Id没问题

let mifareClassic = this.NFCAdapter.getMifareClassic();

mifareClassic.connect({

success: res => {

console.log("连接成功:", res);

let cardPsd = that.allKeys[1]

console.log("获取KeyB密码:", that.allKeys);

const params = {

cmd:0x61,// 验证指令 60,验证A密钥,61 验证B密钥

block: 0x01,// 第几块

cardId: [0x23, 0x9a, 0x30,0x96], // 卡片id onDiscovered获取

key: [0x0d, 0x99, 0x3f, 0x70, 0x92, 0x4e], // 验证KeyB密钥

};

console.log("snr:", params);

console.log("snr2:", that.cardInfo.snr);

console.log("params:", params);

mifareClassic.transceive({

data: new Uint8Array([params.cmd, params.block, ...params.cardId, ...params.key]).buffer,

success: function(res) {

console.log("connect发送数据并解密成功, 接收数据如下:", res);

},

fail: function(err) {

console.log("connect发送数据失败B", err);

},

});

}

})

回答关注问题邀请回答
收藏

1 个回答

  • Demons
    Demons
    2023-09-08

    13017是系统抛回来的错误,可能是卡没贴紧,指令不对等情况,也可以检查下是否是系统的NFC的固件版本导致

    2023-09-08
    有用
    回复 4
    • 梦什么想
      梦什么想
      2023-09-08
      指令缓存指令 0x30 可以,但是我没有传密钥,操作指令+块号+卡Id,我是这样拼的,transceive成功了,但是读取的数据都是一样的,并且读出来的数据不对
      2023-09-08
      回复
    • 梦什么想
      梦什么想
      2023-09-08
      我看到读块逻辑是这样的
      MifareClassic.transceive(Object object)
      分别发送数据
      1 先验证扇区keyA密码:
      指令0x60+块号(1byte)+tagID(4byte)+keyA(6byte)
      2 验证通过后进行块数据读取:
      指令 0x30 + 块号 可以用于读取某个块的数据
      我就尝试用指令0x60 ,13017,卡贴的绝对够紧,调试库版本3.0.1,我安卓手机也没问题,因为App 已经实现过NFC m1卡,cpu卡交互了
      2023-09-08
      回复
    • 梦什么想
      梦什么想
      2023-09-13回复梦什么想
      @Demons
      2023-09-13
      回复
    • DUJUNHUI
      DUJUNHUI
      2023-09-20
      楼主问题解决了吗?我也是一直报13017,
      2023-09-20
      回复
登录 后发表内容