一种生成伪随机数种子的方法与流程

文档序号:16246205发布日期:2018-12-11 23:36阅读:887来源:国知局
一种生成伪随机数种子的方法与流程

本发明涉及汽车领域,具体涉及一种生成伪随机数种子的方法。

背景技术

计算机或计算器产生的随机数有很长的周期性。它们不真正地随机,因为它们实际上是可以计算出来的,但是它们具有类似于随机数的统计特征。这样的发生器叫做伪随机数发生器。

在实际应用中往往使用伪随机数就足够了,这些数列是“似乎”随机的数,实际上它们是通过一个固定的、可以重复的计算方法产生的。

在车辆中,电子控制单元ecu(electroniccontrolunit)通常也使用rand()函数生成的种子,实际是一串固定的随机数列,而每次ecu复位过后,产生的种子都是固定的一串数字,虽然看似种子都是随机的数字,但是每次都是一样的值,例如ecu复位后,通过记录前面几次的安全算法通信数据,然后重复复位,发送相同的数据,即可获取ecu诊断的权限,从而获取ecu内部数据,这种伪随机的机制容易被破解,存在一定安全隐患。



技术实现要素:

针对现有技术中存在的问题,本发明要解决的问题是提供一种生成伪随机数种子的方法,通过引入随机因子与操作函数f,利用生成的伪随机数r,生成伪随机数种子,以保证生成的伪随机数种子的随机性,从而保证安全性。

本发明提供一种生成伪随机数种子的方法,包括以下步骤:

-获取要生成的伪随机数种子s的字节数sn;

-使用伪随机数生成函数生成字节数为sn的伪随机数r;

-获取操作组的字节数bn,sn为bn的整数倍;

-伪随机数r与伪随机数种子s中包括sn/bn个对应的操作组,从伪随机数r中取一个操作组,结合随机因子e,利用操作函数f,计算伪随机数种子s的对应操作组,直至所有操作组已完成操作。

进一步地,从伪随机数r与伪随机数种子s的一端开始依次操作,直至所有操作组已完成操作。

进一步地,随机因子e的字节数为bn或sn。

进一步地,随机因子e的字节数为bn,从伪随机数r与伪随机数种子s的左端开始依次操作,计算伪随机数种子s的对应操作组:

s[bn*i+j]=f(e[j],r[bn*i+j]),

其中i为操作组编号-1,j用于表示操作组中的相应字节。

进一步地,随机因子e的字节数为sn,从伪随机数r与伪随机数种子s的左端开始依次操作,计算伪随机数种子s的对应操作组:

s[bn*i+j]=f(e[bn*i+j],r[bn*i+j]),

其中i为操作组编号-1,j用于表示操作组中的相应字节。

进一步地,随机因子e从当前时间或者模数转换器的输出信号获得。

进一步地,操作函数f为位操作或多种位操作的组合。

进一步地,对于各个操作组的操作,采用相同或不同的操作函数f。

进一步地,操作组的字节数bn为4。

进一步地,所述方法包括以下步骤:

-任选伪随机数种子s的一个字节中的两位,保持二者互斥。

与现有技术相比,本发明提供的生成伪随机数种子的方法,具有以下有益效果:通过引入随机因子与操作函数f,利用生成的伪随机数r,生成伪随机数种子,以保证生成的伪随机数种子的随机性,从而保证安全性。

附图说明

图1是本发明的一个实施例的伪随机数r、随机因子e及伪随机数种子s的示意图;

图2是伪随机数r、随机因子e及伪随机数种子s的示意图;

图3是本发明的一个实施例的生成伪随机数种子的方法的流程图;

图4是另一个实施例中伪随机数r、随机因子e及伪随机数种子s的示意图。

具体实施方式

本发明的一个实施例的生成伪随机数种子的方法,包括以下步骤:

-获取要生成的伪随机数种子s的字节数sn;

-使用伪随机数生成函数rand()生成字节数为sn的伪随机数r;

-获取操作组的字节数bn,sn为bn的整数倍;

-伪随机数r与伪随机数种子s中包括sn/bn个对应的操作组,从伪随机数r中取一个操作组,结合随机因子e,利用操作函数f,计算伪随机数种子s的对应操作组,直至所有操作组已完成操作。

本实施例中,伪随机数种子s的字节数sn为16字节,操作组的字节数bn为4字节,sn为bn的整数倍–4倍,如图1所示。

伪随机数r与伪随机数种子s中包括sn/bn个(4个)对应的操作组,如图3所示,具体地生成伪随机数种子的方法如下:

-获取要生成的伪随机数种子s的字节数sn=16;

-使用伪随机数生成函数rand()生成字节数为16的伪随机数r;

-获取操作组的字节数bn=4,sn为bn的整数倍;

-从当前系统时间获取随机因子e,随机因子e的字节数为bn=4;

-从伪随机数r与伪随机数种子s的左端开始依次操作,计算伪随机数种子s的对应操作组:

●取伪随机数r中的第1操作组,i=操作组编号-1=0,操作函数f为按位异或操作,

s[bn*i+j]=f(e[j],r[bn*i+j])-〉s[j]=f(e[j],r[j]),

其中,j=0,1,2,3,得到伪随机数种子s的第1操作组的各个字节,如图1所示;

●取伪随机数r中的第2操作组,i=操作组编号-1=1,s[bn*i+j]=f(e[j],r[bn*i+j])-〉s[4+j]=f(e[j],r[4+j]),

得到伪随机数种子s的第2操作组的各个字节,如图2所示;

●类似地,取伪随机数r中的第3操作组,…,直至所有操作组已完成操作。

在另一个实施例中,与前述实施例的区别在于:

-从模数转换器的输出信号获取随机因子e,随机因子e的字节数为sn=16;

-从伪随机数r与伪随机数种子s的左端开始依次操作,计算伪随机数种子s的对应操作组:

●取伪随机数r中的第1操作组,i=操作组编号-1=0,操作函数f采用按位与操作,

s[bn*i+j]=f(e[bn*i+j],r[bn*i+j])-〉s[j]=f(e[j],r[j]),

其中,j=0,1,2,3,得到伪随机数种子s的第1操作组的各个字节,如图4所示;

●取伪随机数r中的第2操作组,i=操作组编号-1=1,s[bn*i+j]=f(e[bn*i+j],r[bn*i+j])

-〉s[4+j]=f(e[4+j],r[4+j]),

得到伪随机数种子s的第2操作组的各个字节;

●类似地,取伪随机数r中的第3操作组,…,直至所有操作组已完成操作。

在又一个实施例中,还可以在对每个操作组进行操作时,从当前系统时间获取字节数为bn=4的随机因子e,以增强伪随机数种子s的随机性。

在又一个实施例中,从伪随机数r与伪随机数种子s的右端开始依次操作,当然也可以按照其他顺序对所有操作组进行操作,本发明对此不作限制。

在又一个实施例中,对每个操作组采用不同的操作函数f,例如对第1操作组操作时,操作函数f为按位或;对第2操作组操作时,操作函数f为按位异或;…,进一步增强伪随机数种子s的随机性。

在又一个实施例中,对于每个操作组中,操作函数f为多种位操作的组合,例如对于第1位采用按位与,第2位采用按位异或,…,进一步增强伪随机数种子s的随机性。

在又一个实施例中,生成伪随机数种子的方法还包括以下步骤:

-任选伪随机数种子s的一个字节中的两位,保持二者互斥。

这样可以保证获得的伪随机数种子s不是全1或全0,以增强伪随机数种子s的随机性。

虽然本发明已以较佳实施例披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内所作的各种更动与修改,均应纳入本发明的保护范围内,因此本发明的保护范围应当以权利要求所限定的范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1