密码软加密

/*EXEC SQL include "mud.h";*/
#include "pberrlog.h"
long sc_decrypt(); 
long sc_encry();
long sc_decrypt_2();
long sc_encry_2();
long ScUnpack();
long ScPack();
long sc_str2hex();
long sc_hex2str();
long ChkCstmPwd();
long GetCstmEncPwd();
long GetCstmPwd();
long CrtCstmPwd();
long BackCstmPwd();

long
ScUnpack(bit, block, blockLen)
unsigned char bit[65];      /* bit array */ 
unsigned char block[9];     /* byte array */
unsigned long blockLen;      /* length of byte array */
{
    unsigned long  i, j;
    unsigned char t;

    for (i = 0; i < blockLen; i++) {
        t = block[i];

        for (j = 0; j < 8; j++)
            bit[8 * i + j] = (unsigned char)((t >> (7 - j)) & 1);
    }
    return 0;
}   

long
ScPack(block, bit, blockLen)
unsigned char block[9];       /* byte array */
unsigned char bit[65];        /* bit array */
unsigned long blockLen;        /* length of byte array */
{       
    unsigned long i, j;
    unsigned char t;
    
    for (i = 0; i < blockLen; i++) {
        t = 0;

        for (j = 0; j < 8; j++)
            t |= bit[8 * i + j] << (7 - j);

        block[i] = t;
    }
    return 0;
}   
    
long
sc_str2hex( str, hex )
unsigned char   *str;
unsigned char   *hex;
{
    long    i;

    memset(hex, 0, sizeof(hex));

    sprintf((char *)hex, "%02X%02X%02X%02X%02X%02X%02X%02X",
                    str[0], str[1], str[2], str[3],
                    str[4], str[5], str[6], str[7]);
    hex[16] = 0;
    return 0;
}

long
sc_hex2str( hex, str )
unsigned char   *hex;
unsigned char   *str;
{
    unsigned int    i, i_char;
    char    tmp[2+1];

    memset(str, 0, sizeof(str));
    tmp[2] = 0;

    for ( i = 0; i < 8; i++)
    {
        tmp[0] = hex[i*2];
        tmp[1] = hex[i*2+1];
        sscanf(tmp, "%x", &i_char);
        str[i] = i_char;
    }

    str[8] = 0;
    return 0;
}

long
sc_encry (tlr_no, original, result)
char tlr_no[7];
unsigned char original[9];
unsigned char result[17];
{
    char trankey_bcd[65];
    char PC_TRANKEY[17];
    unsigned char bkey[65],boriginal[65],bmtext[65];
    long i;

    memset( boriginal,0x00, sizeof( boriginal ) );
    memset( bmtext,0x00, sizeof( bmtext ) );

    ScUnpack( boriginal, original, 8 );

    memset( PC_TRANKEY, 0x00, sizeof( PC_TRANKEY ) );
    memset( trankey_bcd, 0x00, sizeof( trankey_bcd ) );
    dis_tran_key(tlr_no,PC_TRANKEY);
    card_change(PC_TRANKEY,trankey_bcd);
    
    for ( i =0 ; i < 64 ; i++) {
        trankey_bcd[i]-='0';
    }
    
    /* bit key(bkey) & bit text(btext) ---> bit encry text(bmtext) */
    DES_CBS( trankey_bcd, boriginal, bmtext );
    
    ScPack( original, bmtext, 8);
    original[8] = '\0';

    sc_str2hex( original, result );

    return 0;   
}

long
sc_decrypt(tlr_no, mpwd, result)
char tlr_no[7];
unsigned char mpwd[17];
unsigned char result[9];
{
    unsigned char btext[65],bcipher[65],bkey[65];
    unsigned char cipher[9];
    char trankey_bcd[65];
    char PC_TRANKEY[17];
        
    unsigned long i,j,k;
    
    memset( btext,       0, sizeof(btext));
    memset( bcipher,     0, sizeof(bcipher));
    memset( bkey,        0, sizeof(bkey));
    memset( cipher,      0, sizeof(cipher));
    memset( PC_TRANKEY,  0, sizeof(PC_TRANKEY));
    memset( trankey_bcd, 0, sizeof(trankey_bcd));

    cipher[8] = bcipher[64] = btext[64] = bkey[64] = '\0';
  
    sc_hex2str( mpwd, cipher );
    /*?? byte->bit */
    ScUnpack( bcipher, cipher, 8 );
    
    dis_tran_key(tlr_no, PC_TRANKEY);
    card_change(PC_TRANKEY,trankey_bcd);

    for ( i =0 ; i < 64 ; i++) {
        trankey_bcd[i]-='0';
    }
    /* bit key(bkey1) & bit text(btext) ---> bit encry text(bmtext) */
    _DES_CBS( trankey_bcd, bcipher, btext );
    for ( i = 0; i< 64; i ++ )
    for ( i = 0; i< 64; i ++ )
    ScPack( result, btext, 8 );

    result[8] = '\0';
    return 0;
}

long
GetCstmEncPwd(encrypwd, pwd)
char *encrypwd;
char *pwd;
{
    char or_pwd[7];

    memset(or_pwd, 0, sizeof(or_pwd));
    if ( GetCstmPwd(encrypwd, or_pwd) )
        return(-1);

    WriteLog ( DEBUG_LVL0, "cstmpwd=[%s][%s]\n", encrypwd, or_pwd);
    if ( ComPmm(or_pwd, pwd) )
        return(-1);
/* modify by ty 20100125 for CZYH
    if ( SC6000_3Des(1, or_pwd, pwd) )
        return(-1);
*/

    /*
    CBSNewLog(2, "cstmpwd", "cstmpwd=[%s][%s]\n", pwd, or_pwd);
    */


    return(0);
}

long
ChkCstmPwd(encrypwd, pwd)
char *encrypwd;
char *pwd;
{
    char    or_pwd[17];

    memset(or_pwd, 0, sizeof(or_pwd));

    if(strlen(encrypwd)>6)
    {
        if ( GetCstmEncPwd(encrypwd, or_pwd) )
            return(-1);
    }
    else
    {
       strcpy(or_pwd,encrypwd);
    }
    return(strcmp(pwd,or_pwd));
}   
    
long
CrtCstmPwd(or_pwd, pwd)
char *or_pwd; 
char *pwd; 
{
    /*
    CBSNewLog(2, "cstmpwd", "cstmpwd=[%s]\n", or_pwd);
    */
/*
    if ( SC6000_3Des(1, or_pwd, pwd) )
        return(-1);
*/  
    if ( ComPmm(or_pwd, pwd) )
        return(-1);
    return(0);
}       

long
sc_encry_2 (original, result)
unsigned char original[9];
unsigned char result[17];
{   
    char trankey_bcd[65];
    char PC_TRANKEY[17];
    unsigned char bkey[65],boriginal[65],bmtext[65];
    long i;
    
    memset( boriginal,0x00, sizeof( boriginal ) );
    memset( bmtext,0x00, sizeof( bmtext ) );

    ScUnpack( boriginal, original, 8 );

    memset( PC_TRANKEY, 0x00, sizeof( PC_TRANKEY ) );
    memset( trankey_bcd, 0x00, sizeof( trankey_bcd ) );
    strcpy( PC_TRANKEY, "1234567890987654");
    card_change(PC_TRANKEY,trankey_bcd);

    for ( i =0 ; i < 64 ; i++) {
        trankey_bcd[i]-='0';
    }
    
    /* bit key(bkey) & bit text(btext) ---> bit encry text(bmtext) */
    DES_CBS( trankey_bcd, boriginal, bmtext );
    
    ScPack( original, bmtext, 8);
    original[8] = '\0';
    
    sc_str2hex( original, result );
    
    return 0;
}   
long
sc_decrypt_2(mpwd, result)
unsigned char mpwd[17];
unsigned char result[9];
{
    unsigned char btext[65],bcipher[65],bkey[65];
    unsigned char cipher[9];
    char trankey_bcd[65];
    char PC_TRANKEY[17];

    unsigned long i,j,k;

    memset( btext,       0, sizeof(btext));
    memset( bcipher,     0, sizeof(bcipher));
    memset( bkey,        0, sizeof(bkey));
    memset( cipher,      0, sizeof(cipher));
    memset( PC_TRANKEY,  0, sizeof(PC_TRANKEY));
    memset( trankey_bcd, 0, sizeof(trankey_bcd));

    cipher[8] = bcipher[64] = btext[64] = bkey[64] = '\0';

    sc_hex2str( mpwd, cipher );
    /*?? byte->bit */
    ScUnpack( bcipher, cipher, 8 );

    strcpy( PC_TRANKEY, "1234567890987654");
    card_change(PC_TRANKEY,trankey_bcd);

    for ( i =0 ; i < 64 ; i++) {
        trankey_bcd[i]-='0';
    }
    /* bit key(bkey1) & bit text(btext) ---> bit encry text(bmtext) */
    _DES_CBS( trankey_bcd, bcipher, btext );

    for ( i = 0; i< 64; i ++ )
    for ( i = 0; i< 64; i ++ )
    ScPack( result, btext, 8 );

    result[8] = '\0';
    return 0;
}

/*设置空函数 编译用*/
int
SC6000_3Des(int type,char *old_pwd,char *des_pwd)
{
     return(0);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值