以前的一个系统的综合业务系统行员密码算法,升级需要改成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;
}

解决方案 »

  1.   

    他要是说明思路可能好多人都会明白 但如果不说可能只有改的人明白~ 国家保密局地 HOHO~^_^
      

  2.   

    CrazyGou(阿狗)(简单就是美)这位大侠已经给改完了吧.....
      

  3.   

    jiangsheng(蒋晟.Net[MVP]) ( ) 信誉:100    
    ===========================================
    i agree, you can recompile the C++ using java JNI technology
    then nothing need to change! hah
      

  4.   

    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));
    strlen(Teller_Buff) != PTELR_LEN
    ==========================================
    换成java函数,返回值和参数都别用指针了,看看返回什么类型,String 或者是char 数组之类的
    比方说strlen(Teller_Buff) != PTELR_LEN直接写成new String(Teller_Buff).length() != PTELR_LEN之类的
    其实是一个字符串的操作,用String类来做,方法参照Api,大家都不知道具体的业务,改起来麻烦,再说了,也就是把函数换换
      

  5.   

    我原来改过DES的合MD5的C++->Java代码转换,只要做下去还是比较快的,麻烦的是在调试的时候,每个输入输出要对应起来,这样就不会有问题了!
    http://www.willwell.cn