JT809 加密解密算法
平台对接标准上说“在数据包发送之前,二进制数据包与伪随机序列按字节进行异或运算。
加密算法如下:用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的算法和加密用的一样即可。