/*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);
}
密码软加密
最新推荐文章于 2024-01-02 11:02:38 发布