⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main0.c

📁 mifarea卡程序mifarea卡程序mifarea卡程序
💻 C
📖 第 1 页 / 共 5 页
字号:
                                buf[iccrsp.len + 1] = iccrsp.SW[0];
                                buf[iccrsp.len + 2] = iccrsp.SW[1];
                                rsplen = iccrsp.len + 3;
                            }
                        }
                    }
                    #endif
                    else if(cmdtype == CMD_PACKEDCMD)
                    {
                        if(len < 6)
                            buf[0] = ERRORCMDLEN;
                        else
                        {
                            icccmd.CLA = cmddata[0];
                            icccmd.INS = cmddata[1];
                            icccmd.P1 = cmddata[2];
                            icccmd.P2 = cmddata[3];
                            if(len > 7) // if len > 7, then lc > 0.
                            {
                                icccmd.Lc = cmddata[4];
                                icccmd.DAT = cmddata + 5;
                                if(len - icccmd.Lc == 7)
                                    icccmd.Le = 0;
                                else if(len - icccmd.Lc == 8)
                                    icccmd.Le = cmddata[5 + icccmd.Lc];
                                else    // error cmd package
                                {
                                    buf[0] = ERRORCMD;
                                    CommSend(buf, 1);
                                    break;
                                }
                            }
                            else if(len == 7)       // else(len == 7) lc = 0.
                            {
                                icccmd.Lc = 0;
                                icccmd.Le = cmddata[4];
                            }
                            else    // len = 6
                            {
                                icccmd.Lc = 0;
                                icccmd.Le = 0;
                            }
                            iccrsp.DAT = buf+1;
                            if(!IccSendCmd(&icccmd, &iccrsp))
                            {
                                // command failed
                                buf[0] = FAIL;
                            }
                            else
                            {
                                // command success, send command excute result
                                // pdu: response_data*n + response_sw*2
                                buf[0] = SUCCESS;
                                buf[iccrsp.len + 1] = iccrsp.SW[0];
                                buf[iccrsp.len + 2] = iccrsp.SW[1];
                                rsplen = iccrsp.len + 3;
                            }
                        }
                    }
                    else if(cmdtype == 2)   // get isam key for hefei cmb
                    {
                        //02 00 06 00 02 87 65 43 21 03 87
                        unsigned char *IC_SN = buf + 300;
                        
                        if(len != 6)
                        {
                            buf[0] = ERRORCMDLEN;
                            CommSend(buf, 1);
                            break;
                        }
                        
                        memcpy(IC_SN, cmddata, 4);
                        
                        iccrsp.DAT = buf + 1;

                        // 1st
                        BuildAPDU("\x00\xA4\x04\x00\x09\xa2\x00\x00\x57\x64\x62\x69\x61\x6f",
                                  14, &icccmd);
                        if(!IccSendCmd(&icccmd, &iccrsp))
                        {
                            buf[0] = FAIL;
                            buf[1] = 0;
                            CommSend(buf, 2);
                            break;
                        }
                        else if(memcmp(iccrsp.SW, "\x90\x00", 2) != 0)
                        {
                            buf[0] = FAIL;
                            buf[1] = iccrsp.SW[0];
                            buf[2] = iccrsp.SW[1];
                            CommSend(buf, 3);
                            break;
                        }
                        // 2nd
                        BuildAPDU("\x80\x1A\x28\x01\x08\x07\x56\x71\x68\x90\x72\x89\x68",
                                  13, &icccmd);
                        if(!IccSendCmd(&icccmd, &iccrsp))
                        {
                            buf[0] = FAIL;
                            buf[1] = 1;
                            CommSend(buf, 2);
                            break;
                        }
                        else if(memcmp(iccrsp.SW, "\x90\x00", 2) != 0)
                        {
                            buf[0] = FAIL;
                            buf[1] = iccrsp.SW[0];
                            buf[2] = iccrsp.SW[1];
                            CommSend(buf, 3);
                            break;
                        }
                        // 3rd
                        memcpy(cmddata, 
                               "\x80\xFA\x00\x00\x18\xff\xff\xff\xff\x05\x51\x0B\x00\xff\xff\xff\xff\x05\x51\x0B\x01\x07\x56\x08\x56\x05\x51\x07\x73",
                               29);
                        memcpy(cmddata+5, IC_SN, 4);
                        memcpy(cmddata+13, IC_SN, 4);
                        BuildAPDU(cmddata, 29, &icccmd);
                        if(!IccSendCmd(&icccmd, &iccrsp))
                        {
                            buf[0] = FAIL;
                            buf[1] = 2;
                            CommSend(buf, 2);
                            break;
                        }
                        else if(memcmp(iccrsp.SW, "\x90\x00", 2) != 0)
                        {
                            buf[0] = FAIL;
                            buf[1] = iccrsp.SW[0];
                            buf[2] = iccrsp.SW[1];
                            CommSend(buf, 3);
                            break;
                        }

                        buf[0]=SUCCESS;
                        buf[iccrsp.len + 1] = iccrsp.SW[0];
                        buf[iccrsp.len + 2] = iccrsp.SW[1];
                        rsplen = iccrsp.len + 3;
                    }
                    else if(cmdtype == 4)   // init pos for hefei cmb
                    {
                        if(len != 3)
                        {
                            buf[0] = ERRORCMDLEN;
                            CommSend(buf, 1);
                            break;
                        }
                        
                        iccrsp.DAT = buf + 1;

                        IccSelect(IC_SAM1);
                        
                        // 1st
                        BuildAPDU("\x00\xa4\x00\x00\x02\x3f\x00", 7, &icccmd);
                        if(!IccSendCmd(&icccmd, &iccrsp))
                        {
                            buf[0] = FAIL;
                            buf[1] = 0;
                            CommSend(buf, 2);
                            break;
                        }/*
                        else if(memcmp(iccrsp.SW, "\x90\x00", 2) != 0)
                        {
                            buf[0] = FAIL;
                            buf[1] = iccrsp.SW[0];
                            buf[2] = iccrsp.SW[1];
                            CommSend(buf, 3);
                            break;
                        }*/
                        
                        // 2nd
                        BuildAPDU("\x00\xb0\x96\x00\x06", 5, &icccmd);
                        if(!IccSendCmd(&icccmd, &iccrsp))
                        {
                            buf[0] = FAIL;
                            buf[1] = 1;
                            CommSend(buf, 2);
                            break;
                        }
                        else if(memcmp(iccrsp.SW, "\x90\x00", 2) != 0)
                        {
                            buf[0] = FAIL;
                            buf[1] = iccrsp.SW[0];
                            buf[2] = iccrsp.SW[1];
                            CommSend(buf, 3);
                            break;
                        }
                        
                        // 3rd
                        memcpy(termsn, iccrsp.DAT, 6);
                        BuildAPDU("\x00\xA4\x04\x00\x09\xa0\x00\x00\x57\x64\x62\x69\x61\x6f",
                                  14, &icccmd);
                        if(!IccSendCmd(&icccmd, &iccrsp))
                        {
                            buf[0] = FAIL;
                            buf[1] = 2;
                            CommSend(buf, 2);
                            break;
                        }
                        else if(memcmp(iccrsp.SW, "\x90\x00", 2) != 0)
                        {
                            buf[0] = FAIL;
                            buf[1] = iccrsp.SW[0];
                            buf[2] = iccrsp.SW[1];
                            CommSend(buf, 3);
                            break;
                        }
                        
                        // 4th
                        IccSelect(IC_SAM2);
                        BuildAPDU("\x00\xa4\x00\x00\x02\x3f\x00", 7, &icccmd);
                        if(!IccSendCmd(&icccmd, &iccrsp))
                        {
                            buf[0] = FAIL;
                            buf[1] = 3;
                            CommSend(buf, 2);
                            break;
                        }/*
                        else if(memcmp(iccrsp.SW, "\x90\x00", 2) != 0)
                        {
                            buf[0] = FAIL;
                            buf[1] = iccrsp.SW[0];
                            buf[2] = iccrsp.SW[1];
                            CommSend(buf, 3);
                            break;
                        }*/
                        
                        // 5th
                        BuildAPDU("\x00\xA4\x04\x00\x09\xa0\x00\x00\x57\x64\x62\x69\x61\x6f",
                                  14, &icccmd);
                        if(!IccSendCmd(&icccmd, &iccrsp))
                        {
                            buf[0] = FAIL;
                            buf[1] = 4;
                            CommSend(buf, 2);
                            break;
                        }
                        else if(memcmp(iccrsp.SW, "\x90\x00", 2) != 0)
                        {
                            buf[0] = FAIL;
                            buf[1] = iccrsp.SW[0];
                            buf[2] = iccrsp.SW[1];
                            CommSend(buf, 3);
                            break;
                        }

                        // 6th
                        BuildAPDU("\x00\x20\x00\x00\x03\x65\x43\x21", 8, &icccmd);
                        if(!IccSendCmd(&icccmd, &iccrsp))
                        {
                            buf[0] = FAIL;
                            buf[1] = 5;
                            CommSend(buf, 2);
                            break;
                        }
                        else if(memcmp(iccrsp.SW, "\x90\x00", 2) != 0)
                        {
                            buf[0] = FAIL;
                            buf[1] = iccrsp.SW[0];
                            buf[2] = iccrsp.SW[1];
                            CommSend(buf, 3);
                            break;
                        }
                        
                        // 7th
                        BuildAPDU("\x00\xb0\x95\x00\x1e", 5, &icccmd);
                        if(!IccSendCmd(&icccmd, &iccrsp))
                        {
                            buf[0] = FAIL;
                            buf[1] = 6;
                            CommSend(buf, 2);
                            break;
                        }
                        else if(memcmp(iccrsp.SW, "\x90\x00", 2) != 0)
                        {
                            buf[0] = FAIL;
                            buf[1] = iccrsp.SW[0];
                            buf[2] = iccrsp.SW[1];
                            CommSend(buf, 3);
                            break;
                        }
                        
                        memcpy(terminf, iccrsp.DAT+12, 8);
                        buf[0] = SUCCESS;
                        memcpy(buf+iccrsp.len+1, termsn, 6);
                        buf[iccrsp.len + 1 + 6] = iccrsp.SW[0];
                        buf[iccrsp.len + 2 + 6] = iccrsp.SW[1];
                        rsplen = iccrsp.len + 3 + 6;
                        CommSend(buf, rsplen);      // 直接发送应用序列号(使用PBOC命令获得)和IC卡响应
                                                    // 状态字(sw,2bytes),和终端号6字节(终端号排在最后)
                        break;

                        //rsplen = iccrsp.len + 3;
                        //CommSend(buf, rsplen);
                        //memcpy(buf+1, termsn, 6);
                        //CommSend(buf, 7);
                        //break;
                    }
                    else if(cmdtype == 5)   // pos for hefei cmb
                    {
                        //02 00 14 01 05 00 00 03 E8 05 20 04 12 31 10 10 10 03 ea
                        //02 00 14 FE FA FF FF FC 17 FA DF FB ED CE EF EF EF 03 EA 
                        //02 00 14 FE FA FF FF Ff fe FA DF FB ED CE EF EF EF 03 00
                        unsigned char *ptmp = buf + 256 + 14 + 4;
                        unsigned char *mac1 = buf + 256 + 14;
                        
                        if(len != 14)
                        {
                            buf[0] = ERRORCMDLEN;
                            CommSend(buf, 1);
                            break;
                        }
                        
                        memcpy(buf+256, cmddata, len-2);
                        cmddata = buf+256;
                        
                        IccSelect(IC_SAM2);
                        iccrsp.DAT = buf+1;
                        memcpy(ptmp, "\x80\x50\x01\x01\x0b\x01", 6);
                        memcpy(ptmp+6, cmddata, 4);
                        memcpy(ptmp+6+4, termsn, 6);
                        ptmp[6+4+6] = 0x0f;
                        BuildAPDU(ptmp, 6+4+6+1, &icccmd);
                        if(!IccSendCmd(&icccmd, &iccrsp))
                        {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -