int decipher2(const char* key,char* plain_text,char* crypted_text,int length) { char t_crypt[MAX_CI_LEN]; int i; for(i=0;i<length/2;i++) t_crypt[i]=asc_bcd(crypted_text+i*2); for(i=0;i<length/16;i++) TDes(1,&t_crypt[8*i],triple_des_key,&plain_text[8*i]); plain_text[length/2]=0; return 0; }
int decipher3(const char* key,char* plain_text,char* crypted_text,int length) { char t_crypt[MAX_CI_LEN]; int i; char usekey[32]; for(i=0;i<32;i++) usekey[i]='\0'; strncpy(usekey,key,16); for(i=0;i<length/2;i++) t_crypt[i]=asc_bcd(crypted_text+i*2); for(i=0;i<length/16;i++) TDes(1,&t_crypt[8*i],usekey,&plain_text[8*i]); plain_text[length/2]=0; return 0; }
unsigned char GetTrackInfo(unsigned char *pucTrack) { qDebug() << Q_FUNC_INFO; unsigned short uiI = 0,uiISO2Len = 0,uiISO3Len = 0; unsigned char *pucPtr = NULL; unsigned char ucJ = 0; unsigned char ucISO2Status = 0,ucISO3Status = 0; pucPtr = pucTrack; pucPtr += 2; /* Track2 information */ ucISO2Status = *(pucPtr); pucPtr ++; uiISO2Len = *(pucPtr); G_EXTRATRANS_uiISO2Len=*(pucPtr); qDebug("\nucISO2Status=%02x",ucISO2Status); qDebug("\nuiISO2Len=%d\n",uiISO2Len); /***判断二磁道数据是否正确***/ if(ucISO2Status != SUCCESS_TRACKDATA) return ERR_MAG_TRACKDATA; if(uiISO2Len > TRANS_ISO2LEN) return(ERR_MAG_TRACKDATA); pucPtr ++; for( uiI=0; uiI<uiISO2Len; uiI++,pucPtr ++) { G_EXTRATRANS_aucISO2[uiI] = *(pucPtr) | 0x30; } qDebug("\nTrack 2 length[%d]Data:[%s]",G_EXTRATRANS_uiISO2Len,G_EXTRATRANS_aucISO2); /* Track3 information */ ucISO3Status = *(pucPtr); pucPtr ++; uiISO3Len = *(pucPtr); pucPtr ++; qDebug("\n ucISO3Status=%02x",ucISO3Status); qDebug("\n uiISO3Len=%d\n",uiISO3Len); for( uiI=0; uiI<uiISO3Len; uiI++,pucPtr ++) { G_EXTRATRANS_aucISO3[uiI] = *(pucPtr) | 0x30; } //G_NORMALTRANS_ucUAAISOLen3 =uiISO3Len; G_EXTRATRANS_uiISO3Len=uiISO3Len; qDebug("\n Track 3 length[%d]Data:[%s]",G_EXTRATRANS_uiISO3Len,G_EXTRATRANS_aucISO3); /***过滤三磁道状态不正确和磁道数据超长***/ if((ucISO3Status != SUCCESS_TRACKDATA) ||(uiISO3Len > TRANS_ISO3LEN)) { G_EXTRATRANS_uiISO3Len = 0; qDebug("\nTrack 3 length=%d",G_EXTRATRANS_uiISO3Len); } // 测试卡号 if(g_changeParam.simCard==true) GetTestTrackInfo(); for(ucJ=0;ucJ<G_EXTRATRANS_uiISO2Len;ucJ++) { if(G_EXTRATRANS_aucISO2[ucJ] == '=' || G_EXTRATRANS_aucISO2[ucJ] == 'd' || G_EXTRATRANS_aucISO2[ucJ] == 'D') { /*************取卡号***************/ G_NORMALTRANS_ucMainAccountLen = ucJ; memcpy(G_NORMALTRANS_aucSourceAcc, G_EXTRATRANS_aucISO2, ucJ); memcpy(NormalTransData.ucExpiredDate, &G_EXTRATRANS_aucISO2[ucJ+1], 4); if(ucJ>=13) asc_bcd(G_EXTRATRANS_aucCardPan_UnAssign,6,&G_EXTRATRANS_aucISO2[ucJ-13],12); else asc_bcd(G_EXTRATRANS_aucCardPan_UnAssign,6,&G_EXTRATRANS_aucISO2[0],12); break; } } qDebug("Card Number = %s", G_NORMALTRANS_aucSourceAcc); qDebug("Card Pan = %s", G_EXTRATRANS_aucCardPan_UnAssign); return(SUCCESS); }