以前的一个系统的综合业务系统行员密码算法,升级需要改成java,算法不能变./* Function : iCryptPasswdP
Usage Range : 对外提供
Purpose : 对行员口令字段加密 Parameter In : Passwd 未加密口令6位
Teller 行员代码6位
Parameter Out: Return Code 非NULL串:加密后口令
NULL :原始口令字段为空
*/
char *iCryptPasswdP(char *Teller,char *Passwd)
{
/* 口令中不允许以空格结束 */
static char Tmp_Passwd[PTELRPASSWD_LEN+1];
char Teller_Buff[PTELR_LEN+1];
char Passwd_Buff[PPASSWD_LEN+2];
int i,j,k,m,n;
char a,b; memset(Teller_Buff,0,sizeof(Teller_Buff));
memset(Passwd_Buff,0,sizeof(Passwd_Buff));
strcat(Teller_Buff,(char *)delsp(Teller,PTELR_LEN)); 去掉空格再赋给teller_buff
strcat(Passwd_Buff,(char *)delsp(Passwd,PPASSWD_LEN));
memset(Tmp_Passwd,0,sizeof(Tmp_Passwd));
n = strlen(Passwd_Buff);
if(n == 0)
return NULL;
if(strlen(Teller_Buff) != PTELR_LEN)
return NULL;
k = 0;
Passwd_Buff[PPASSWD_LEN] = 'A'+n;
Passwd_Buff[PPASSWD_LEN+1] = 0;
m = 0;
for(i=0;i<=PPASSWD_LEN+1;i++) {
if(i < PPASSWD_LEN)
j = Passwd_Buff[i]+Teller_Buff[PTELR_LEN-i-1]-'0' ;
else
j = Passwd_Buff[(i+n)%PTELR_LEN]+Teller_Buff[PTELR_LEN-((i+n) % PTELR_LEN)-1]-'0' ;
j = j+ (m+i+j/5) % PTELR_LEN;
m = 0;
j = j*j;
if(j >= 10000){
j %= 10000;
m += 1;
}
a = j /100;
b = j % 100;
m = m*2;
if(a<'0'){
a = a+ '0';
m = m+1;
}
m = m*2;
if(a>'9' && a< 'A') {
a = a+ 10;
m = m+1;
} else if(a>'Z' && a < 'a') {
a = a+ 10;
m = m+1;
}
Tmp_Passwd[k] = a ;
m = m*2;
if(b<'0') {
b = b+ '0';
m = m+1;
}
m = m*2;
if(b>'9' && b< 'A') {
b = b+ 10;
m = m+1;
}else if(b>'Z' && b < 'a'){
b = b+ 10;
m = m+1;
}
Tmp_Passwd[k+1] = b ;
k += 2;
if(i<PPASSWD_LEN)
Passwd_Buff[PPASSWD_LEN+1] += m*(i+1);
if(i == PPASSWD_LEN)
Passwd_Buff[PPASSWD_LEN+1] %= 100;
}
return Tmp_Passwd;
}
Usage Range : 对外提供
Purpose : 对行员口令字段加密 Parameter In : Passwd 未加密口令6位
Teller 行员代码6位
Parameter Out: Return Code 非NULL串:加密后口令
NULL :原始口令字段为空
*/
char *iCryptPasswdP(char *Teller,char *Passwd)
{
/* 口令中不允许以空格结束 */
static char Tmp_Passwd[PTELRPASSWD_LEN+1];
char Teller_Buff[PTELR_LEN+1];
char Passwd_Buff[PPASSWD_LEN+2];
int i,j,k,m,n;
char a,b; memset(Teller_Buff,0,sizeof(Teller_Buff));
memset(Passwd_Buff,0,sizeof(Passwd_Buff));
strcat(Teller_Buff,(char *)delsp(Teller,PTELR_LEN)); 去掉空格再赋给teller_buff
strcat(Passwd_Buff,(char *)delsp(Passwd,PPASSWD_LEN));
memset(Tmp_Passwd,0,sizeof(Tmp_Passwd));
n = strlen(Passwd_Buff);
if(n == 0)
return NULL;
if(strlen(Teller_Buff) != PTELR_LEN)
return NULL;
k = 0;
Passwd_Buff[PPASSWD_LEN] = 'A'+n;
Passwd_Buff[PPASSWD_LEN+1] = 0;
m = 0;
for(i=0;i<=PPASSWD_LEN+1;i++) {
if(i < PPASSWD_LEN)
j = Passwd_Buff[i]+Teller_Buff[PTELR_LEN-i-1]-'0' ;
else
j = Passwd_Buff[(i+n)%PTELR_LEN]+Teller_Buff[PTELR_LEN-((i+n) % PTELR_LEN)-1]-'0' ;
j = j+ (m+i+j/5) % PTELR_LEN;
m = 0;
j = j*j;
if(j >= 10000){
j %= 10000;
m += 1;
}
a = j /100;
b = j % 100;
m = m*2;
if(a<'0'){
a = a+ '0';
m = m+1;
}
m = m*2;
if(a>'9' && a< 'A') {
a = a+ 10;
m = m+1;
} else if(a>'Z' && a < 'a') {
a = a+ 10;
m = m+1;
}
Tmp_Passwd[k] = a ;
m = m*2;
if(b<'0') {
b = b+ '0';
m = m+1;
}
m = m*2;
if(b>'9' && b< 'A') {
b = b+ 10;
m = m+1;
}else if(b>'Z' && b < 'a'){
b = b+ 10;
m = m+1;
}
Tmp_Passwd[k+1] = b ;
k += 2;
if(i<PPASSWD_LEN)
Passwd_Buff[PPASSWD_LEN+1] += m*(i+1);
if(i == PPASSWD_LEN)
Passwd_Buff[PPASSWD_LEN+1] %= 100;
}
return Tmp_Passwd;
}
===========================================
i agree, you can recompile the C++ using java JNI technology
then nothing need to change! hah
memset(Passwd_Buff,0,sizeof(Passwd_Buff));
strcat(Teller_Buff,(char *)delsp(Teller,PTELR_LEN)); 去掉空格再赋给teller_buff
strcat(Passwd_Buff,(char *)delsp(Passwd,PPASSWD_LEN));
memset(Tmp_Passwd,0,sizeof(Tmp_Passwd));
strlen(Teller_Buff) != PTELR_LEN
==========================================
换成java函数,返回值和参数都别用指针了,看看返回什么类型,String 或者是char 数组之类的
比方说strlen(Teller_Buff) != PTELR_LEN直接写成new String(Teller_Buff).length() != PTELR_LEN之类的
其实是一个字符串的操作,用String类来做,方法参照Api,大家都不知道具体的业务,改起来麻烦,再说了,也就是把函数换换
http://www.willwell.cn