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代码:
public static byte[] encrypt(int M1,int IA1,int IC1,int key,byte [] data) {
if(data == null) return null;
byte[] array = data;//使用原对象,返回原对象
//byte[] array = new byte[data.length]; //数组复制 返回新的对象
//System.arraycopy(data, 0, array, 0, data.length);
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的算法和加密用的一样即可。
JT809 加密解密算法的更多相关文章
- 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输
Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...
- 一组PHP可逆加密解密算法
对于大部分密码加密,我们可以采用md5.sha1等方法.可以有效防止数据泄露,但是这些方法仅适用于无需还原的数据加密. 对于需要还原的信息,则需要采用可逆的加密解密算法. 下面一组PHP函数是实现此加 ...
- RC4加密解密算法
RC4相对是速度快.安全性高的加密算法.在实际应用中,我们可以对安全系数要求高的文本进行多重加密,这样破解就有一定困难了.如下测试给出了先用RC4加密,然后再次用BASE64编码,这样双重锁定,保证数 ...
- java 实现 DES加密 解密算法
DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共64位,是DES算法的工作密钥:Data也为8个字节64位,是要被加密或被解密的数据:Mode为DES的工作方式,有两种: ...
- 数据的加密传输——单片机上实现TEA加密解密算法
各位大侠在做数据传输时,有没有考虑过把数据加密起来进行传输,若在串口或者无线中把所要传的数据加密起来,岂不是增加了通信的安全性.常用的加密解密算法比如DES.RSA等,受限于单片机的内存和运算速度,实 ...
- md5加密以及可逆的加密解密算法
md5加密 package gov.mof.fasp2.gcfr.adjustoffset.adjust; import java.security.MessageDigest; public cla ...
- N个整数(数的大小为0-255)的序列,把它们加密为K个整数(数的大小为0-255).再将K个整数顺序随机打乱,使得可以从这乱序的K个整数中解码出原序列。设计加密解密算法,且要求K<=15*N.
N个整数(数的大小为0-255)的序列,把它们加密为K个整数(数的大小为0-255).再将K个整数顺序随机打乱,使得可以从这乱序的K个整数中解码出原序列.设计加密解密算法,且要求K<=15*N. ...
- RSA加密解密算法
/** * RSA加密解密算法 * Class Rsa */ class Rsa { /** * 获取pem格式的公钥 * @param $public_key 公钥文件路径或者字符串 * @retu ...
- php与java通用AES加密解密算法
AES指高级加密标准(Advanced Encryption Standard),是当前最流行的一种密码算法,在web应用开发,特别是对外提供接口时经常会用到,下面是我整理的一套php与java通用的 ...
随机推荐
- express, mocha, supertest,istanbul
引子 有群友问到Express怎么做 单元测试/覆盖率测试,这是上篇所遗漏的,特此补上 Express Web测试 做 Express Web 测试首先要面对的问题是在哪端进行测试: 客户端的请求响应 ...
- 解决putty自动断开的问题
解决putty自动断开的问题 putty窗口上右键>change settings.打开后如下,修改seconds of keepalives,让putty每隔若干秒发送心跳包
- Python(数据库之数据类型)
一.创建表的完整语法 #[]内的可有可无,即创建表时字段名和类型是必须填写的,宽度与约束条件是可选择填写的. create table 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[ ...
- 转载一篇pandas和,mysql
http://pandas.pydata.org/pandas-docs/stable/comparison_with_sql.html#compare-with-sql-join http://bl ...
- 007-组件和Props
一.概述 组件让你可以将用户界面分成独立的,可重复使用的部分,并且可以独立思考每个部分. 从概念上讲,组件就像JavaScript函数一样.他们接受任意输入(称为“props”)并返回描述屏幕上应显示 ...
- python库numpy的reshape的终极解释
a = np.arange(2*4*4) b = a.reshape(1,4,4,2) #应该这样按反序来理解:最后一个2是一个只有2个元素的向量,最后的4,2代表4×2的矩阵,最 ...
- c++中的构造函数初始化列表
三种情况下,必须在构造函数初始化列表中初始化成员: 1.const成员 2.引用成员 3.没有默认构造函数的成员
- Codeforces Round #305 (Div. 2)
C. Mike and Frog 题意:有一只青蛙和一朵花,分别高度为h1.h2,每浇一次水,h1=(x1*h1+y1)mod m,h2=(x2*h2+y2)mod m.求最少浇多少次后h1=a1,h ...
- Oracle数据安全(三)权限管理
一.权限概述 所谓权限就是执行特定类型SQL命令或访问其他模式对象的权利.用户在数据库中可以执行什么样的操作,以及可以对哪些对象进行操作,完全取决于该用户所拥有的权限. 在Oracle中将权限分为系统 ...
- SpringBoot RedisMQ消息队列与发布订阅
SpringBoot简单整合RedisMQ消息队列和发布订阅 注:RedisMq消息队列使用redis数组实现,leftpush存一,rightpop取一. 1.application.propert ...