예제 #1
0
파일: tdes.c 프로젝트: sanikoyes/cipher
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;
}
예제 #2
0
파일: tdes.c 프로젝트: sanikoyes/cipher
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;
}
예제 #3
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);
}