平台对接标准上说“在数据包发送之前,二进制数据包与伪随机序列按字节进行异或运算。
加密算法如下:用N模伪随机序列发生器产生伪随机字节序列。将待传输的数据与伪随机码按字节进行异或运算”
下面代码是C语言的代码:
Const unsigned long M1 =A; Const unsigned long IA1 =B; Const unsigned long IC1 =C; Void encrypt( unsigned long key, unsigned char* buffer, unsigned short size ) { unsigned short idx = 0; if( key == 0 ) key = 1; while( idx < size ) { key = IA1 * ( key % M1 ) + IC1; buffer[idx++] ^= (unsigned char)((key>>20)&0xFF); } }
java代码:
public static byte [] encrypt(int M1,int IA1,int IC1,int key,byte [] array) { int idx=0; if(key==0){ key=1; } int mkey = M1; if (0 == mkey ) { mkey = 1; } while(idx<array.length){ key = IA1 * ( key % mkey ) + IC1; array[idx]^=((key>>20)&0xFF); idx++; } return array; }
总结:
加密代码就是解密代码。
两次异或就可以得到原文。
key的算法和加密用的一样即可。