注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
tiankai001的个人空间 https://home.eeworld.com.cn/space-uid-139222.html [收藏] [复制] [分享] [RSS]
日志

CPU卡设计实例及程序设计(十八)卡内部认证

已有 933 次阅读2017-2-27 22:19 |个人分类:CPU卡开发设计程序实例| 程序设计, 认证, 加密, CPU卡

/*******************************************
函数名称:CardInsideVerify
函数功能:卡内部认证
输入参数:pcReCardRand-卡产生的随机数, KEYID--认证密钥标识符
输出参数:pcReceDataBuff,加密后的数据
描述:发命令头-发命令数据-发“取响应数据”-判断是否正确
*******************************************/
unsigned char *CardInsideVerify(unsigned char pcReCardRand[8],unsigned char KEYID)
{
  unsigned char cReceCardDatdBuff2[8]={0};
  unsigned char *pcReceDataBuff;
  unsigned int itemp;
  
  cCommandLen=0x05; 
  TxAndRxBuff[0]=0x00; 
  TxAndRxBuff[1]=0x88;
  TxAndRxBuff[2]=0x00;
  TxAndRxBuff[3]=KEYID;    
  TxAndRxBuff[4]=0x08;
  
  SendCommandHead_Pro();
  if(ErrorReadWriteBIT&iErrorRWrCard) goto CardInsideValiEnd;
   
  memcpy(&TxAndRxBuff[0],&pcReCardRand[0],8);
  
  Delay1XETU(4); 
  cCommandLen=8;
  SendCommand(cCommandLen);//
 
  TxAndRxBuff[0]=CardReceChar(); 
  TxAndRxBuff[1]=CardReceChar();  
  SendC0Comm();
    if(ErrorReadWriteBIT&iErrorRWrCard) goto CardInsideValiEnd;
    for(itemp=0;itemp<8;itemp++)
    {     
     cReceCardDatdBuff2[itemp]=CardReceChar();   //接受cpu卡返回信息  
     if(ErrorReadWriteBIT&iErrorRWrCard) break;
    }
    TxAndRxBuff[0]=CardReceChar(); 
    TxAndRxBuff[1]=CardReceChar();
    if((TxAndRxBuff[0]!=0x90)&&(TxAndRxBuff[1]!=0x00)) 
    {
      iErrorRWrCard=ErrorReadWriteBIT|iErrorRWrCard;
      goto CardInsideValiEnd; 
    }   
CardInsideValiEnd:
   pcReceDataBuff=&cReceCardDatdBuff2[0];
   delay_ms2M(5);
   return pcReceDataBuff; 
}

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章