平台對接標准上說“在數據包發送之前,二進制數據包與偽隨機序列按字節進行異或運算。
加密算法如下:用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代碼:
1 public static byte[] encrypt(int M1,int IA1,int IC1,int key,byte [] data) { 2 if(data == null) return null; 3 4 byte[] array = data;//使用原對象,返回原對象 5 6 //byte[] array = new byte[data.length]; //數組復制 返回新的對象 7 //System.arraycopy(data, 0, array, 0, data.length); 8 9 int idx=0; 10 if(key==0){ 11 key=1; 12 } 13 int mkey = M1; 14 if (0 == mkey ) 15 { 16 mkey = 1; 17 } 18 while(idx<array.length){ 19 key = IA1 * ( key % mkey ) + IC1; 20 array[idx]^=((key>>20)&0xFF); 21 idx++; 22 } 23 return array; 24 }
總結:
加密代碼就是解密代碼。
兩次異或就可以得到原文。
key的算法和加密用的一樣即可。