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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM