c源代码:
int jiami(char *source,char *target)
{
unsigned char def_str[18]={1,9,7,4,1,0,2,1,1,9,7,4,'0',3,3,'0',0};
unsigned char temp1[18];
unsigned int i,len;
unsigned char x=0;
strcpy((char *)temp1,source);
len=strlen((char *)temp1);
for(i=len;i<16;i++)
temp1[i]=0;
for(i=0;i<16;i++)
temp1[i]=temp1[i]^def_str[i];
for(i=0;i<16;i++)
x=x+temp1[i];
temp1[0]=temp1[0]+x;
for(i=1;i<16;i++)
{
temp1[i]=temp1[i-1]+temp1[i]+x;
x=temp1[i-1]+temp1[i];
}
temp1[0]=temp1[15]+temp1[0]+x;
for(i=0;i<16;i++)
{
if(temp1[i]>126)
temp1[i]=temp1[i]-126;
if(temp1[i]>126)
temp1[i]=temp1[i]-126;
if(temp1[i]<=32)
temp1[i]=temp1[i]+33;
}
temp1[16]=0;
strcpy(target,(char *)temp1);
return 0;
}
我翻译的pb函数,其中mm是当作行数的参数输入:
Int def_str[18] = {1,9,7,4,1,0,2,1,1,9,7,4,0,3,3,0,0}
Int temp1[18]
Int i,Len,j
String ls_return
Long X = 0
//strcpy((char *)temp1,source);
//len=strlen((char *)temp1);
Len = Len(mm)
FOR j = 1 To Len
temp1[j] = asc(Mid(mm,j,1))
NEXT
//For(i = Len;i < 16;i++)
FOR i = Len+1 To 16
temp1[i] = 0
NEXT
//For(i = 0;i < 16;i++)
FOR i = 1 To 16
temp1[i] = temp1[i]^def_str[i]
NEXT
//For(i = 0;i < 16;i++)
FOR i = 1 To 16
X = X+Long(temp1[i])
NEXT
temp1[1] = temp1[1]+X
//For(i = 1;i < 16;i++)
FOR i = 2 To 16
temp1[i] = temp1[i-1]+temp1[i]+X;
X = temp1[i-1]+temp1[i];
NEXT
temp1[1] = temp1[16]+temp1[1]+X;
//For(i = 0;i < 16;i++)
FOR i = 1 To 16
If(temp1[i] > 126) THEN
temp1[i] = temp1[i]-126
ElseIf(temp1[i] > 126) THEN
temp1[i] = temp1[i]-126
ElseIf(temp1[i] <= 32) THEN
temp1[i] = temp1[i]+33
END IF
NEXT
temp1[17] = 0;
//strcpy(target,(char *)temp1);
FOR i = 1 To 16
ls_return = ls_return+Char(temp1[i] )
NEXT
RETURN ls_return
得到的加密后的字符串不一致,求助
------解决方案--------------------
这样转换不行吧。 C中是地址,转换成pb中的话,一般我们用的是byte。 pb中的精度值跟c的差别有点大。 建议自己采用pb的方式进行加密。
------解决方案--------------------
那你还不如把C语言的代码编译成dll或pbx供PB调用
------解决方案--------------------
楼上的方法可以。