[求助] RC632读m1卡密码验证不过,想请大家帮看下问题出来什么地方

xs19820727   2015-5-26 16:23 楼主
#include
#include
#include"RC632.h"
#include"slrc632.h"
#include"iso14443a.h"

void Delay_50us(unsigned int t);
void DelayMs(unsigned int t);
extern void UART0_init(void);
extern void SendData(unsigned char SendByte);
extern  void SendString(char *s);
unsigned char Nkey_a[6] = {0xff,0xff,0xff,0xff,0xff,0xff}; //定义密钥A
unsigned char Nkey_c[12];
unsigned char Nkey_c3[12]={0xcf,0xdf,0xdf,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xdf,0xd9,0xda};
unsigned char Nkey_c1[12]={0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0};//定义用来转换后12字节的密钥
unsigned char Nkey_c2[12]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};//定义用来转换后12字节的密钥
unsigned char KuaiN=0;
unsigned char xdata Read_data[16];
void main()
{
        unsigned char i=0;
        unsigned char status;
        unsigned char atq[2];
        unsigned char UID[4];
       
           UART0_init();
        RF_RST=0;
        led=1 ;
    Rc500Ready();
//                SendData(0xaa);SendData(0xaa); DelayMs(100);
        led=1;
status=M500PcdConfigISOType('A');
        led=0 ;
//         status=ChangeCodeKey(Nkey_a,Nkey_c);     //将密钥转换为RC500接收格式,
                                 
//        if(status==MI_OK)
//         {
        //                                        for(i=0;i<12;i++)
        //{
       
        //               
        //        SendData(Nkey_c[i]);
        //}
               
        while(1)
        {
        led=1 ;
       
    status = PcdRequest(0x52, atq);
                    
        if (status != MI_OK)
        {
                 
                status = PcdRequest(0x52, atq);
                        if (status != MI_OK)
        {
                                // SendData(0xa1);
                                        continue;
        }
  }

   status=PcdAnticoll(&UID);
          
        if(status==MI_OK)
        {
           //SendData(0xa1);
        for(i=0;i<4;i++)
        {
       
                        led=0 ;
                //SendData(UID[i]);
        }
status = PcdSelect(&UID);

}

if(status==MI_OK)  //开始验证该卡
       {//SendString("选卡");
                        ChangeCodeKey(Nkey_a,Nkey_c);               
                                                //SendString("密钥转换");
              status=PcdAuthKey(Nkey_c);            //将已转换格式后的密钥送到RC500的FIFO中
                       
            if(status==MI_OK)
            {//SendString("密钥送到RC500的FIFO");
             /* 用存放RC500的FIFO中的密钥和卡上的密钥进行验证 ,0x60:验证A密钥,0x61:验证B密钥
             */
             status=PcdAuthState(0x60,0x35,UID);   
            if(status==MI_OK)
             {//SendString("验证后读卡");
                  status=PcdRead(0x35,Read_data);    //读取一个块号中16个字节的数据            //读卡上一块(block)数据(16字节
                                                         for(i=0;i<16;i++)
        {
       
                       
                SendData(Read_data[i]);
        }
              if(status==MI_OK)
              {
                PcdHalt();      //命令卡进入休眠状态
               }
         DelayMs(50);     

                led=0 ;
     DelayMs(50);   
                 led=1 ;

        }
}
}}}//}
这句是验证密码status=PcdAuthState(0x60,0x35,UID);总是验证不过去请有经验的高手帮看下密码什么地方不对


回复评论 (2)

密码是6个0xff转换格式后是什么样呢?
点赞  2015-5-26 17:33
楼主解决了吗   我也是这个问题。   第一次验证就出问题了。  还有我6个0xff   转换格式是12个0x0f
点赞  2017-10-11 11:19
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复