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的算法和加密用的一样即可。

posted @ 2018-10-18 14:49  panchanggui  阅读(1933)  评论(1编辑  收藏  举报