搜索

tag 标签: 程序设计

相关帖子

版块 作者 回复/查看 最后发表
LPC-1788程序设计 【NXP LPC MCU】 benpaoxiaoxiong 2017-5-17 1 1247 gs001588 2017-5-30 20:38
这样来编写高效率稳定的单片机代码! attach_img 单片机 菜菜11 2017-5-14 1 2163 dontium 2017-5-14 11:33
逐步深入LabVIEW程序设计架构 模拟电子 ld056k 2017-4-7 0 707 ld056k 2017-4-7 12:24
关于有返回函数在C51程序设计中的问题?? attach_img 【51单片机】 徐建庆 2017-3-22 5 1752 徐建庆 2017-3-23 15:10
悬赏 用51单片机和neo-6m GPS模块测速 - [悬赏 3 分芯积分] 【51单片机】 瑜小鱼 2017-2-11 3 3393 huo_hu 2017-2-12 17:23
DSP28335的_程序设计步骤 【微控制器 MCU】 Jacktang 2017-1-22 0 2222 Jacktang 2017-1-22 10:57
计算全球地磁程序设计 attach_img TI技术论坛 gxg1122 2016-12-24 15 1802 gxg1122 2019-8-24 17:06
一周好资源:2016.12.19-2016.12.25 下载中心专版 okhxyyo 2016-12-19 0 2525 okhxyyo 2016-12-19 10:00
一周好资源:16.12.12-16.12.18 下载中心专版 okhxyyo 2016-12-12 0 2626 okhxyyo 2016-12-12 09:00
“删繁就简” PIC CCS 内置函数精简程序设计 【PIC单片机】 qwerghf 2016-10-17 2 1700 weizhongc 2016-10-20 12:17
这是个坑--编译器优化 attach_img 单片机 汤权 2016-9-23 13 4434 lcofjp 2016-10-20 14:15
程序设计中的感悟 信息发布 毛利兰 2016-9-2 0 606 毛利兰 2016-9-2 14:04
2选1数据选择器程序设计 attach_img 【Altera SoC】 suoma 2016-8-26 2 2735 suoma 2016-9-1 16:57
2输入与非门程序设计 attach_img 【Altera SoC】 suoma 2016-8-24 0 1617 suoma 2016-8-24 22:26
工程师很有必要了解的常用接口大全 模拟电子 扫IC网`Allen 2016-8-16 3 6347 lyl0719 2016-9-14 22:06
ELAB2.0程序结构与计算流程 attach_img 信息发布 CAE初学者 2016-8-9 0 505 CAE初学者 2016-8-9 16:20
Atomic write, 揭开你的面纱 attach_img FPGA/CPLD 白丁 2016-6-4 0 1818 白丁 2016-6-4 11:15
TMS320F28335程序设计之外设模块配置2---ePWM 【微控制器 MCU】 wuxy910810 2016-5-30 1 1664 wjmcu2 2016-5-30 16:25
TMS320F28335程序设计之外设模块配置1---SCI串行通信接口设计 【微控制器 MCU】 wuxy910810 2016-5-30 1 1645 Charlottechang 2016-5-30 16:24
想自学Linux,你该读哪些书? 信息发布 奋斗之路 2016-4-11 0 707 奋斗之路 2016-4-11 15:32

相关日志

分享 CPU卡设计实例及程序设计(三十)读ESAM记录文件
tiankai001 2017-3-13 19:50
/******************************************* 函数名称: 函数功能:读记录文件 输入参数: 输出参数: 描述: *******************************************/ void ReadEsamVolumeInfo(unsigned char cVolumeRecordSerial,unsigned char cVolumeInfoID) { unsigned char cTemp; cCommandLen=0x05; TxAndRxBuff =0x00; TxAndRxBuff =0xb2; TxAndRxBuff =cVolumeRecordSerial; TxAndRxBuff =cVolumeInfoID; TxAndRxBuff =0x04; SendCommandHead_Pro();// if(ErrorReadWriteBITiErrorRWrCard) goto ReadEsamVolumeInfoEnd; for(cTemp=0;cTemp6;cTemp++) { //接受返回信息 TxAndRxBuff =EsamReceChar(); if(ErrorReadWriteBITiErrorRWrCard) break; } if((TxAndRxBuff !=0x90)(TxAndRxBuff !=0x00)) { iErrorRWrCard=ErrorReadWriteBIT|iErrorRWrCard; goto ReadEsamVolumeInfoEnd; } ReadEsamVolumeInfoEnd: delay_ms2M(5);; }
个人分类: CPU卡开发设计程序实例|1012 次阅读|0 个评论
分享 CPU卡设计实例及程序设计(二十九)读电子钱包余额
tiankai001 2017-3-13 19:49
/******************************************* 函数名称: 函数功能:读电子钱包余额 输入参数: 输出参数: 描述: *******************************************/ unsigned char* ReadCardBalance(unsigned char cCaseFileID) { unsigned char cTemp; unsigned char ulTemp ={0}; unsigned char *pcTempBuf; cCommandLen=0x05; TxAndRxBuff =0x80; TxAndRxBuff =0x5c; TxAndRxBuff =0x00; TxAndRxBuff =cCaseFileID; TxAndRxBuff =0x04; //先发送5个头文件,看返回结果是否正确 SendCommandHead_Pro(); if(ErrorReadWriteBITiErrorRWrCard) goto ReadCardBalanceEnd; for(cTemp=0;cTemp6;cTemp++) { //接受返回信息 TxAndRxBuff =CardReceChar(); if(ErrorReadWriteBITiErrorRWrCard) break; } if((TxAndRxBuff !=0x90)(TxAndRxBuff !=0x00)) { iErrorRWrCard=ErrorReadWriteBIT|iErrorRWrCard; goto ReadCardBalanceEnd; } memcpy(ulTemp ,TxAndRxBuff ,0x04); ReadCardBalanceEnd: pcTempBuf=ulTemp ; delay_ms2M(5); return pcTempBuf; }
个人分类: CPU卡开发设计程序实例|874 次阅读|0 个评论
分享 CPU卡设计实例及程序设计(二十八)ESAM用过程密钥生成MAC2
tiankai001 2017-3-13 19:48
/******************************************* 函数名称: 函数功能:ESAM用过程密钥生成MAC2 输入参数: 输出参数: 描述:电子钱包消费中用到 *******************************************/ unsigned char* GetMAC2(unsigned char cSumBalance ,unsigned char cTempData ) { unsigned char *cPtr_MAC2; unsigned char cTemp,cReadByteLen; cCommandLen=0x05; TxAndRxBuff =0x80; TxAndRxBuff =0xfa; TxAndRxBuff =0x01; TxAndRxBuff =0x00; TxAndRxBuff =0x08; //先发送5个头文件,看返回结果是否正确 SendCommandHead_Pro(); if(ErrorReadWriteBITiErrorRWrCard) goto GetMAC2End; Delay1XETU(4); cCommandLen=0x08; //余额 memcpy(TxAndRxBuff ,cSumBalance ,0x04); memcpy(TxAndRxBuff ,cTempData ,0x04); cReadByteLen=0x04; SendCommand(cCommandLen); if(ErrorReadWriteBITiErrorRWrCard) goto GetMAC2End; TxAndRxBuff =EsamReceChar(); TxAndRxBuff =EsamReceChar(); SendC0Comm(); if(ICSAMicflag1) { for(cTemp=0;cTempcReadByteLen+2;cTemp++) { TxAndRxBuff =CardReceChar(); if(ErrorReadWriteBITiErrorRWrCard) break; } } //读模块 else { for(cTemp=0;cTempcReadByteLen+2;cTemp++) { TxAndRxBuff =EsamReceChar(); if(ErrorReadWriteBITiErrorRWrCard) break; } } if((TxAndRxBuff !=0x90)(TxAndRxBuff !=0x00)) iErrorRWrCard=ErrorReadWriteBIT|iErrorRWrCard; GetMAC2End: delay_ms2M(5); cPtr_MAC2=TxAndRxBuff ; return cPtr_MAC2; }
个人分类: CPU卡开发设计程序实例|537 次阅读|0 个评论
分享 CPU卡设计实例及程序设计(二十七)ESAM用过程密钥生成MAC1
tiankai001 2017-3-13 19:47
/******************************************* 函数名称: 函数功能:ESAM用过程密钥生成MAC1 输入参数: 输出参数: 描述:电子钱包消费中用到 *******************************************/ unsigned char* GetMAC1(unsigned char cSumBalance ,unsigned char cUserNumberTemp , unsigned char cDateTemp ,unsigned char cTempData ) { unsigned char *cPtr_MAC1; unsigned char cReadByteLen,cTemp; cCommandLen=0x05; TxAndRxBuff =0x80; TxAndRxBuff =0xfa; TxAndRxBuff =0x01; TxAndRxBuff =0x00; TxAndRxBuff =0x18; //先发送5个头文件,看返回结果是否正确 SendCommandHead_Pro(); if(ErrorReadWriteBITiErrorRWrCard) goto GetMAC1End; Delay1XETU(4); cCommandLen=0x18; //伪随机数,终端交易序号,购气次数,卡应用序列号 memcpy(TxAndRxBuff ,cSumBalance ,0x04); TxAndRxBuff =0x06; memcpy(TxAndRxBuff ,cUserNumberTemp ,0x06); memcpy(TxAndRxBuff ,cDateTemp ,0x07); memcpy(TxAndRxBuff ,cTempData ,0x06); cReadByteLen=0x04; SendCommand(cCommandLen); if(ErrorReadWriteBITiErrorRWrCard) goto GetMAC1End; TxAndRxBuff =EsamReceChar(); TxAndRxBuff =EsamReceChar(); SendC0Comm(); if(ICSAMicflag1) { for(cTemp=0;cTempcReadByteLen+2;cTemp++) { TxAndRxBuff =CardReceChar(); if(ErrorReadWriteBITiErrorRWrCard) break; } } //读模块 else { for(cTemp=0;cTempcReadByteLen+2;cTemp++) { TxAndRxBuff =EsamReceChar(); if(ErrorReadWriteBITiErrorRWrCard) break; } } if((TxAndRxBuff !=0x90)(TxAndRxBuff !=0x00)) iErrorRWrCard=ErrorReadWriteBIT|iErrorRWrCard; GetMAC1End: delay_ms2M(5); cPtr_MAC1=TxAndRxBuff ; return cPtr_MAC1; }
个人分类: CPU卡开发设计程序实例|948 次阅读|0 个评论
分享 CPU卡设计实例及程序设计(二十五)ESAM主消费密钥生成过程密钥
tiankai001 2017-3-9 22:31
/******************************************* 函数名称:GetProcessKey1 函数功能:ESAM主消费密钥生成过程密钥 输入参数:cApplyNum -卡公共应用信息文件中的序列号, KEYNum2,密钥标识 输出参数:无 描述:发命令头--正确,则发数据--判断响应数据是否正确 *******************************************/ void GetProcessKey1(unsigned char cFlaseRand ,unsigned char cTradeNumber , unsigned char cApplyNum ,unsigned char cBuyGasNumber ) { cCommandLen=0x05; TxAndRxBuff =0x80; TxAndRxBuff =0x1a; TxAndRxBuff =0x43; TxAndRxBuff =0x01; TxAndRxBuff =0x10; //先发送5个头文件,看返回结果是否正确 SendCommandHead_Pro(); if(ErrorReadWriteBITiErrorRWrCard) goto ProduProccKey1End; Delay1XETU(4); cCommandLen=16; //伪随机数,终端交易序号,购气次数,卡应用序列号 memcpy(TxAndRxBuff ,cFlaseRand ,0x04); memcpy(TxAndRxBuff ,cTradeNumber ,0x02); memcpy(TxAndRxBuff ,cBuyGasNumber ,0x02); memcpy(TxAndRxBuff ,cApplyNum ,0x08); SendCommand(cCommandLen); TxAndRxBuff =EsamReceChar(); TxAndRxBuff =EsamReceChar(); if((TxAndRxBuff !=0x90)(TxAndRxBuff !=0x00)) iErrorRWrCard=ErrorReadWriteBIT|iErrorRWrCard; ProduProccKey1End: delay_ms2M(5);; }
个人分类: CPU卡开发设计程序实例|717 次阅读|0 个评论
分享 CPU卡设计实例及程序设计(二十四)生成过程密钥
tiankai001 2017-3-9 22:30
/******************************************* 函数名称:GetProcessKey 函数功能:生成过程密钥 输入参数:cApplyNum -卡公共应用信息文件中的序列号, KEYNum2,密钥标识 输出参数:无 描述:发命令头--正确,则发数据--判断响应数据是否正确 *******************************************/ void GetProcessKey(unsigned char cApplyNum ,unsigned char KEYNum2) { cCommandLen=0x05; TxAndRxBuff =0x80; TxAndRxBuff =0xfa; TxAndRxBuff =0x00; TxAndRxBuff =KEYNum2; TxAndRxBuff =0x08; SendCommandHead_Pro(); //先发送5个头文件,看返回结果是否正确 if(ErrorReadWriteBITiErrorRWrCard) goto ProduProccKeyEnd; Delay1XETU(4); cCommandLen=8; //卡公共应用信息文件中的序列号 memcpy(TxAndRxBuff ,cApplyNum ,8); SendCommand(cCommandLen); TxAndRxBuff =EsamReceChar(); TxAndRxBuff =EsamReceChar(); if((TxAndRxBuff !=0x90)(TxAndRxBuff !=0x00)) iErrorRWrCard=ErrorReadWriteBIT|iErrorRWrCard; ProduProccKeyEnd: delay_ms2M(5); }
个人分类: CPU卡开发设计程序实例|508 次阅读|0 个评论
分享 CPU卡设计实例及程序设计(二十三)ESAM过程密钥内部认证
tiankai001 2017-2-28 23:07
/******************************************* 函数名称:EsamInsideVali 函数功能:ESAM过程密钥内部认证 输入参数: pcReceCardRand-卡产生的随机数,KEYNum1,内部认证密钥标识 输出参数:无 描述:发命令头--发数据-发取响应数据命令--获得数据 *******************************************/ unsigned char* EsamInsideVerify(unsigned char* pcReceCardRand,unsigned char KEYNum1) { unsigned char cReceCardDatdBuff2 ={0}; unsigned char *pcReceDataBuff; unsigned int itemp; cCommandLen=0x05; TxAndRxBuff =0x80; TxAndRxBuff =0xfa; TxAndRxBuff =0x00; TxAndRxBuff =KEYNum1; TxAndRxBuff =0x08; SendCommandHead_Pro(); //发命令头 if(ErrorReadWriteBITiErrorRWrCard) goto EsamInsideValiEnd; memcpy(TxAndRxBuff ,pcReceCardRand,8); Delay1XETU(4); cCommandLen=8; SendCommand(cCommandLen);//发数据 TxAndRxBuff =EsamReceChar(); TxAndRxBuff =EsamReceChar(); SendC0Comm(); //发“取响应数据”命令 for(itemp=0;itemp8;itemp++) { cReceCardDatdBuff2 =EsamReceChar(); //接受ESAM返回信息 if(ErrorReadWriteBITiErrorRWrCard) break; } TxAndRxBuff =EsamReceChar(); TxAndRxBuff =EsamReceChar(); if((TxAndRxBuff !=0x90)(TxAndRxBuff !=0x00)) { iErrorRWrCard=ErrorReadWriteBIT|iErrorRWrCard; goto EsamInsideValiEnd; } EsamInsideValiEnd: pcReceDataBuff=cReceCardDatdBuff2 ; delay_ms2M(5); return pcReceDataBuff; }
个人分类: CPU卡开发设计程序实例|1192 次阅读|0 个评论
分享 CPU卡设计实例及程序设计(二十二)卡82H外部认证,ESAM04H,05H,06H外部认证
tiankai001 2017-2-28 23:07
/******************************************* 函数名称:AllExternVerify 函数功能:卡82H外部认证,ESAM04H,05H,06H外部认证 输入参数: cApplySerialNumber2 卡应用序列号 输出参数:认证结果 描述:卡82H外部认证--ESAM04H--ESAM05H--ESAM06H外部认证 *******************************************/ unsigned char AllExternVerify(unsigned char cApplySerialNumber2 ) { //卡外部认证 icflag1=ICSAM|icflag1; CardAndEsamExternVerify(cApplySerialNumber2,CardInfoUpKey); if(!((ErrorCardExtAuthBIT+ErrorReadWriteBIT)iErrorRWrCard)) { //esam 04H外部认证,信息更新外部认证 EsamExternVerify(EsamInfoUpdateKEY,CardInfoUpdateKEY); if(!((ErrorEsamExtAuthBIT+ErrorReadWriteBIT)iErrorRWrCard)) { //esam 05H外部认证,密钥更新外部认证 //EsamExternVerify(EsamKEYUpdateKey,CardKEYUpdateKey); //if(!((ErrorEsamExtAuthBIT+ErrorReadWriteBIT)iErrorRWrCard)) //{ //esam 06H外部认证,用气量更新外部认证 //EsamExternVerify(EsamVolumeUpdateKey,CardVolumeUpdateKey); //if(!((ErrorEsamExtAuthBIT+ErrorReadWriteBIT)iErrorRWrCard)) //{ return 1; //} //} } } return 0; }
个人分类: CPU卡开发设计程序实例|511 次阅读|0 个评论
分享 CPU卡设计实例及程序设计(二十一)ESAM外部认证
tiankai001 2017-2-28 23:06
/******************************************* 函数名称:EsamExternVerify 函数功能:ESAM外部认证 输入参数: 输出参数: 描述:ESAM取随机数-卡用对应密钥对随机数进行内部认证,获得数据D -ESAM对用相应密钥数据D进行外部认证 *****************************************/ void EsamExternVerify(unsigned char EsamKEYID,unsigned char CardKEYID) { unsigned char *pcReceEsamRand,*pcReceCardData1; unsigned char cReceEsamRand ={0},cReceCardData1 ={0}; icflag1=~ICSAMicflag1; pcReceEsamRand=Get_RandNum(); //从ESAM模块取随机数 if(ErrorReadWriteBITiErrorRWrCard) goto EsamExterValiEnd; memcpy(cReceEsamRand ,pcReceEsamRand,8); icflag1=ICSAM|icflag1; //随机数送卡做内部认证,生成数据d1 pcReceCardData1=CardInsideVerify(cReceEsamRand,CardKEYID); if(ErrorReadWriteBITiErrorRWrCard) goto EsamExterValiEnd; memcpy(cReceCardData1 ,pcReceCardData1,8); icflag1=~ICSAMicflag1; //d1送ESAM模块做外部认证 ExternVerify(cReceCardData1,EsamKEYID); EsamExterValiEnd: if(ErrorReadWriteBITiErrorRWrCard) iErrorRWrCard=ErrorEsamExtAuthBIT|iErrorRWrCard; }
个人分类: CPU卡开发设计程序实例|552 次阅读|0 个评论
分享 CPU卡设计实例及程序设计(二十)外部认证,卡和ESAM通用
tiankai001 2017-2-27 22:20
/******************************************* 函数名称:ExternVerify 函数功能:外部认证,卡和ESAM通用 输入参数:cReceCardData1 命令数据8字节,cKeyNum3密钥标识符 输出参数: 描述:发命令头-发命令数据-判断响应命令字是否正确 *******************************************/ void ExternVerify(unsigned char cReceCardData1 ,unsigned char cKeyNum3) { cCommandLen=0x05; TxAndRxBuff =0x00; TxAndRxBuff =0x82; TxAndRxBuff =0x00; TxAndRxBuff =cKeyNum3; TxAndRxBuff =0x08; SendCommandHead_Pro(); if(ErrorReadWriteBITiErrorRWrCard) goto ExterVeriProEnd; Delay1XETU(5); memcpy(TxAndRxBuff ,cReceCardData1 ,8); cCommandLen=8; SendCommand(cCommandLen); if(ErrorReadWriteBITiErrorRWrCard) goto ExterVeriProEnd; if(ICSAMicflag1) { TxAndRxBuff =CardReceChar(); TxAndRxBuff =CardReceChar(); } else { TxAndRxBuff =EsamReceChar(); TxAndRxBuff =EsamReceChar(); } if((TxAndRxBuff !=0x90)(TxAndRxBuff !=0x00)) iErrorRWrCard=ErrorReadWriteBIT|iErrorRWrCard; ExterVeriProEnd: delay_ms2M(5); }
个人分类: CPU卡开发设计程序实例|575 次阅读|0 个评论
分享 CPU卡设计实例及程序设计(十九)卡和ESAM之间外部认证
tiankai001 2017-2-27 22:20
/******************************************* 函数名称:CardExterVali 函数功能:卡与ESAM之间外部认证 输入参数:cApplySerialNumber1 -卡公共应用信息文件中的序列号, KeyNum2-外部认证密钥标识符 输出参数:无 描述:卡取随机数-ESAM用02密钥对序列号生成过程密钥-ESAM过程密钥内部认证 --卡82H外部认证 *******************************************/ void CardAndEsamExternVerify(unsigned char cApplySerialNumber1 ,unsigned char KeyNum2) { unsigned char *pcReceCardRand; unsigned char *pcReceCardData; unsigned char cReceCardData ={0}; unsigned char cReceCardRand ={0}; icflag1=ICSAM|icflag1; pcReceCardRand=Get_RandNum(); //从卡上取随机数 if(ErrorReadWriteBITiErrorRWrCard) goto CardExterValiEnd; memcpy(cReceCardRand ,pcReceCardRand,8); icflag1=~ICSAMicflag1; //ESAM用02密钥,将序列号生成过程密钥 GetProcessKey(cApplySerialNumber1,EsamInfoUpKey); if(ErrorReadWriteBITiErrorRWrCard) goto CardExterValiEnd; icflag1=~ICSAMicflag1; //ESAM用过程密钥对随机数做内部认证,生成数据D pcReceCardData=EsamInsideVerify(cReceCardRand,EsamKEYVerify); if(ErrorReadWriteBITiErrorRWrCard) goto CardExterValiEnd; memcpy(cReceCardData ,pcReceCardData,8); //cpu卡使用外部验证指令对数据D进行外部验证 icflag1=ICSAM|icflag1; ExternVerify(cReceCardData,CardInfoUpKey); CardExterValiEnd: _NOP(); if(ErrorReadWriteBITiErrorRWrCard) iErrorRWrCard=ErrorCardExtAuthBIT|iErrorRWrCard; }
个人分类: CPU卡开发设计程序实例|510 次阅读|0 个评论
分享 CPU卡设计实例及程序设计(十八)卡内部认证
tiankai001 2017-2-27 22:19
/******************************************* 函数名称:CardInsideVerify 函数功能:卡内部认证 输入参数:pcReCardRand-卡产生的随机数, KEYID--认证密钥标识符 输出参数:pcReceDataBuff,加密后的数据 描述:发命令头-发命令数据-发“取响应数据”-判断是否正确 *******************************************/ unsigned char *CardInsideVerify(unsigned char pcReCardRand ,unsigned char KEYID) { unsigned char cReceCardDatdBuff2 ={0}; unsigned char *pcReceDataBuff; unsigned int itemp; cCommandLen=0x05; TxAndRxBuff =0x00; TxAndRxBuff =0x88; TxAndRxBuff =0x00; TxAndRxBuff =KEYID; TxAndRxBuff =0x08; SendCommandHead_Pro(); if(ErrorReadWriteBITiErrorRWrCard) goto CardInsideValiEnd; memcpy(TxAndRxBuff ,pcReCardRand ,8); Delay1XETU(4); cCommandLen=8; SendCommand(cCommandLen);// TxAndRxBuff =CardReceChar(); TxAndRxBuff =CardReceChar(); SendC0Comm(); if(ErrorReadWriteBITiErrorRWrCard) goto CardInsideValiEnd; for(itemp=0;itemp8;itemp++) { cReceCardDatdBuff2 =CardReceChar(); //接受cpu卡返回信息 if(ErrorReadWriteBITiErrorRWrCard) break; } TxAndRxBuff =CardReceChar(); TxAndRxBuff =CardReceChar(); if((TxAndRxBuff !=0x90)(TxAndRxBuff !=0x00)) { iErrorRWrCard=ErrorReadWriteBIT|iErrorRWrCard; goto CardInsideValiEnd; } CardInsideValiEnd: pcReceDataBuff=cReceCardDatdBuff2 ; delay_ms2M(5); return pcReceDataBuff; }
个人分类: CPU卡开发设计程序实例|677 次阅读|0 个评论
分享 CPU卡设计实例及程序设计(十七)卡和ESAM内部认证
tiankai001 2017-2-27 22:18
/******************************************* 函数名称:CardAndEsamInterVali 函数功能:卡和ESAM内部认证 输入参数:cApplySerialNumber ,卡应用序列号 输出参数: 描述:卡与esam模块之间的内部认证过程: 从卡取随机数--卡对随机数作内部认证,得到D1--ESAM用应用序列号 产生过程密钥--ESAM用过程密钥对随机数内部认证,得到D2--比较D1与D2 --相等则认证成功 *******************************************/ void CardAndEsamInsideVerify(unsigned char cApplySerialNumber ) { unsigned char *pcReceCardData1,*pcReceCardData2; unsigned char cReceCardData1 ={0},cReceCardData2 ={0}; unsigned char cReceCardRand1 ={0}; unsigned char ctemp; pcReceCardData1=Get_RandNum(); //取8字节随机数 if((ErrorReadWriteBIT+ErrorRandBIT)iErrorRWrCard) goto CardAndEsamInsideVerifyEnd; //随机数存放在数组中 memcpy(cReceCardRand1 ,pcReceCardData1,8); delay_ms2M(5); //卡83H内部认证 pcReceCardData1=CardInsideVerify(cReceCardRand1,CardInsideVerifyKEY); if(ErrorReadWriteBITiErrorRWrCard) goto CardAndEsamInsideVerifyEnd; //内部认证获得的加密值,作为D1 memcpy(cReceCardData1 ,pcReceCardData1,8); //对ESAM操作 icflag1=~ICSAMicflag1; //ESAM用03密钥将应用序列号生成过程密钥 GetProcessKey(cApplySerialNumber,EsamInsideVerifyKEY); if(ErrorReadWriteBITiErrorRWrCard) goto CardAndEsamInsideVerifyEnd; //用过程密钥对随机数进行内部认证,生成D2 pcReceCardData2=EsamInsideVerify(cReceCardRand1,EsamKEYVerify); if(ErrorReadWriteBITiErrorRWrCard) goto CardAndEsamInsideVerifyEnd; memcpy(cReceCardData2 ,pcReceCardData2,8); //比较D1,D2,相等则认证成功 ctemp=memcmp(cReceCardData2 ,cReceCardData1 ,8); if(ctemp!=0) { iErrorRWrCard=ErrorPasswBIT|iErrorRWrCard; } CardAndEsamInsideVerifyEnd: _NOP(); }
个人分类: CPU卡开发设计程序实例|341 次阅读|0 个评论
分享 CPU卡设计实例及程序设计(十六)取8字节和4字节随机数
tiankai001 2017-2-27 22:16
/******************************************* 函数名称:Get_RandNum 函数功能:从卡或者ESAM取8字节随机数 输入参数:无 输出参数:*pcRandBuff 描述:发命令头-接收到的数据等于命令头中的第二字节后,接下来的8个字节是随机数 *******************************************/ unsigned char *Get_RandNum(void) { unsigned char cRandBuff ={0}; unsigned char *pcRandBuff; unsigned int itemp; cCommandLen=0x05; TxAndRxBuff =0x00; TxAndRxBuff =0x84; TxAndRxBuff =0x00; TxAndRxBuff =0x00; TxAndRxBuff =0x08; SendCommandHead_Pro(); if(ICSAMicflag1) { for(itemp=0;itemp10;itemp++) { cRandBuff =CardReceChar(); if(ErrorReadWriteBITiErrorRWrCard) goto GetRandNumEnd; } } else { for(itemp=0;itemp10;itemp++) { cRandBuff =EsamReceChar(); if(ErrorReadWriteBITiErrorRWrCard) goto GetRandNumEnd; } } if((cRandBuff !=0x90)(cRandBuff !=0x00)) { iErrorRWrCard=ErrorRandBIT|iErrorRWrCard; } GetRandNumEnd: delay_ms2M(5); pcRandBuff=cRandBuff ; return pcRandBuff; } /******************************************* 函数名称:Get_RandNum4Byte 函数功能:从卡或者ESAM取4字节随机数 输入参数:无 输出参数:*pcRandBuff 描述:发命令头-接收到的数据等于命令头中的第二字节后,接下来的4个字节是随机数 *******************************************/ unsigned char *Get_RandNum4Byte(void) { unsigned char cRandBuff ={0}; unsigned char *pcRandBuff; unsigned int itemp; cCommandLen=0x05; TxAndRxBuff =0x00; TxAndRxBuff =0x84; TxAndRxBuff =0x00; TxAndRxBuff =0x00; TxAndRxBuff =0x04; SendCommandHead_Pro(); if(ICSAMicflag1) { for(itemp=0;itemp6;itemp++) { cRandBuff =CardReceChar(); if(ErrorReadWriteBITiErrorRWrCard) goto GetRandNum4ByteEnd; } } else { for(itemp=0;itemp6;itemp++) { cRandBuff =EsamReceChar(); if(ErrorReadWriteBITiErrorRWrCard) goto GetRandNum4ByteEnd; } } if((cRandBuff !=0x90)(cRandBuff !=0x00)) { iErrorRWrCard=ErrorRandBIT|iErrorRWrCard; } GetRandNum4ByteEnd: delay_ms2M(5); pcRandBuff=cRandBuff ; return pcRandBuff; }
个人分类: CPU卡开发设计程序实例|935 次阅读|0 个评论
分享 CPU卡设计实例及程序设计(十五)发送取响应数据命令
tiankai001 2017-2-20 23:52
/******************************************* 函数名称:SendC0Comm 函数功能:发送“取响应数据”命令 输入参数:无 输出参数:无 描述:当接收到的命令里含有需要接受的数据时,发送此命令开始接收数据 *******************************************/ void SendC0Comm(void) { unsigned char cTemp; Delay1XETU(4); if(TxAndRxBuff ==0x61) { cTemp=TxAndRxBuff ; cCommandLen=0x05; TxAndRxBuff =0x00; TxAndRxBuff =0xc0; TxAndRxBuff =0x00; TxAndRxBuff =0x00; TxAndRxBuff =cTemp; SendCommandHead_Pro(); } else iErrorRWrCard=ErrorReadWriteBIT|iErrorRWrCard; }
个人分类: CPU卡开发设计程序实例|259 次阅读|0 个评论
分享 CPU卡设计实例及程序设计(十四)命令头的发送及后续数据发送
tiankai001 2017-2-20 23:51
/******************************************* 函数名称:SendCommandHead_Pro 函数功能:向卡或ESAM发送命令头 输入参数:无 输出参数:无 描述:发送命令头:4字节命令体+1字节命令长度, 返回的数据时发送的第二个字节,如果不是,读写错误 *******************************************/ void SendCommandHead_Pro(void) { unsigned char cReturnCommand; SendCommand(cCommandLen); //先发送5个命令头字节 if(ErrorReadWriteBITiErrorRWrCard) goto SendCommandHead_ProEnd; if(ICSAMicflag1) cReturnCommand=CardReceChar(); //等待返回的字节 else cReturnCommand=EsamReceChar(); if(cReturnCommand==TxAndRxBuff ) //判断是否正确 { cTxAndRxStatus=ReceINSRightBIT|cTxAndRxStatus; } SendCommandHead_ProEnd:; } /******************************************* 函数名称:SendCommand 函数功能:向卡或ESAM发送命令头后续的数据 输入参数:cCommandLen,数据长度 输出参数:无 描述:命令头发送成功后,发送命令体 *******************************************/ void SendCommand(unsigned char cCommandLen) { int itemp; if(ICSAMicflag1) { for(itemp=0;itempcCommandLen;itemp++) { CardSendChar(TxAndRxBuff ); if(ErrorReadWriteBITiErrorRWrCard) goto SendCommandErr; } } else { for(itemp=0;itempcCommandLen;itemp++) { EsamSendChar(TxAndRxBuff ); if(ErrorReadWriteBITiErrorRWrCard) goto SendCommandErr; } } SendCommandErr:; }
个人分类: CPU卡开发设计程序实例|562 次阅读|0 个评论
分享 CPU卡设计实例及程序设计(十三)读二进制文件
tiankai001 2017-2-20 23:43
/******************************************* 函数名称:ReadBinFile 函数功能:读二进制文件 输入参数:cReadFileTitle,文件标识符, cReadByteOffect,欲读取数据在文件中的偏移量 cReadByteLen需要返回的数据长度 输出参数:无 描述: *******************************************/ void ReadBinFile(unsigned char cReadFileTitle,unsigned char cReadByteOffect, unsigned int cReadByteLen) { int itemp; unsigned int iTemp; delay_ms2M(5); iTemp=cReadByteLen; cCommandLen=0x05; TxAndRxBuff =0x00; TxAndRxBuff =0xb0; //要读取的文件01(短文件标识符) TxAndRxBuff =cReadFileTitle; //读取偏移量 TxAndRxBuff =cReadByteOffect; //要读取的数据长度 TxAndRxBuff =(unsigned char)iTemp; SendCommandHead_Pro(); //Delay1XETU(4); //读卡 if(ICSAMicflag1) { for(itemp=0;itempcReadByteLen+2;itemp++) { TxAndRxBuff =CardReceChar(); if(ErrorReadWriteBITiErrorRWrCard) break; } } //读模块 else { for(itemp=0;itempcReadByteLen+2;itemp++) { TxAndRxBuff =EsamReceChar(); if(ErrorReadWriteBITiErrorRWrCard) break; } } if((TxAndRxBuff !=0x90)(TxAndRxBuff !=0x00)) iErrorRWrCard=ErrorReadWriteBIT|iErrorRWrCard; delay_ms2M(5); }
个人分类: CPU卡开发设计程序实例|588 次阅读|0 个评论
分享 CPU卡设计实例及程序设计(十二)写二进制文件
tiankai001 2017-2-20 23:42
/******************************************* 函数名称:WriteBinFile 函数功能:写二进制文件 输入参数:cWriteFileTitle--要写的文件名,WriteByteOffect--数据在文件中的偏移量, cWriteByteLen--数据长度,*cTransDataBuff--要写的数据 输出参数: 描述: *******************************************/ void WriteBinFile(unsigned char cWriteFileTitle,unsigned char cWriteByteOffect, unsigned char cWriteByteLen,unsigned char *cTransDataBuff) { DelayX1ms(5); cCommandLen=0x05; TxAndRxBuff =0x00; TxAndRxBuff =0xd6; //要写的文件标识符 TxAndRxBuff =cWriteFileTitle; //要写的数据在文件中的偏移量 TxAndRxBuff =cWriteByteOffect; //要写的数据长度 TxAndRxBuff =cWriteByteLen; SendCommandHead_Pro(); if(ErrorReadWriteBITiErrorRWrCard) goto WriteBinFileEnd; Delay1XETU(4); cCommandLen=cWriteByteLen; memcpy(TxAndRxBuff ,cTransDataBuff,cWriteByteLen); SendCommand(cCommandLen); if(ErrorReadWriteBITiErrorRWrCard) goto WriteBinFileEnd; if(ICSAMicflag1) { TxAndRxBuff =CardReceChar(); TxAndRxBuff =CardReceChar(); } else { TxAndRxBuff =EsamReceChar(); TxAndRxBuff =EsamReceChar(); } if((TxAndRxBuff !=0x90)||(TxAndRxBuff !=0x00)) iErrorRWrCard=ErrorReadWriteBIT|iErrorRWrCard; WriteBinFileEnd:; }
个人分类: CPU卡开发设计程序实例|701 次阅读|0 个评论
分享 CPU卡设计实例及程序设计(十一)文件选择
tiankai001 2017-2-20 23:41
/******************************************* 函数名称:SelectFile 函数功能:选择文件目录 输入参数:无 输出参数:无 描述:先根据变量选择是对卡还是ESAM操作 选择文件,CPU卡的主目录3F 01,ESAM的主目录3F 00 用于选择卡或ESAM的主工作目录,主目录选择成功后才能继续对卡或ESAM操作 *******************************************/ void SelectFile(void) { unsigned char ctemp; unsigned char ucTransBuf ={0}; if(ICSAMicflag1) { ucTransBuf =MainDir; ucTransBuf =CardMainDir; } else { ucTransBuf =MainDir; ucTransBuf =EsamMainDir; } TxAndRxBuff =0x00; TxAndRxBuff =0xA4; TxAndRxBuff =0x00; TxAndRxBuff =0x00; TxAndRxBuff =0x02; cCommandLen=0x05; SendCommandHead_Pro(); if(ErrorReadWriteBITiErrorRWrCard) goto SelectFileEnd; Delay1XETU(4); if(ReceINSRightBITcTxAndRxStatus) { TxAndRxBuff =ucTransBuf ; TxAndRxBuff =ucTransBuf ; cCommandLen=2; SendCommand(cCommandLen); } if(ErrorReadWriteBITiErrorRWrCard) goto SelectFileEnd; if(ICSAMicflag1) //从卡上取数 { for(ctemp=0;ctemp2;ctemp++) { TxAndRxBuff =CardReceChar(); if(ErrorReadWriteBITiErrorRWrCard) break; } if(ErrorReadWriteBITiErrorRWrCard) { iErrorRWrCard=ErrorResetBIT|iErrorRWrCard; iErrorRWrCard=~ErrorReadWriteBITiErrorRWrCard; goto SelectFileEnd; } } else //从ESAM取数 { for(ctemp=0;ctemp2;ctemp++) { TxAndRxBuff =EsamReceChar(); if(ErrorReadWriteBITiErrorRWrCard) break; } if(ErrorReadWriteBITiErrorRWrCard) { iErrorRWrCard=ErrorResetBIT|iErrorRWrCard; iErrorRWrCard=~ErrorReadWriteBITiErrorRWrCard; goto SelectFileEnd; } } // if((TxAndRxBuff !=RespondStateByte3)(TxAndRxBuff !=RespondStateByte1)) iErrorRWrCard=ErrorReadWriteBIT|iErrorRWrCard; SelectFileEnd: delay_ms2M(5); }
个人分类: CPU卡开发设计程序实例|764 次阅读|0 个评论

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-5-31 12:52 , Processed in 0.066204 second(s), 24 queries , Gzip On, MemCache On.

Powered by EEWORLD电子工程世界

© 2020 http://bbs.eeworld.com.cn/

返回顶部