一种伪随机数种子生成方法转让专利

申请号 : CN201610888324.2

文献号 : CN106502627B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 吴清早李宏伟李佳燚

申请人 : 黑龙江省电工仪器仪表工程技术研究中心有限公司

摘要 :

本发明涉及一种伪随机数种子生成方法,主要用于生成计算机适用——特别是单片机适用的伪随机数种子。本发明所述的方法主要分三个步骤:第一步,通过AD转换器采样传感器数据或读取系统时间或开机时长数据等方式,得到数据的初值;第二步,根据数据初值的长度情况,选用按权分段法或镜像法得到中间数据。第三步,将中间数据进行加或非进位加处理、截断处理和重复处理等,得到伪随机数种子。

权利要求 :

1.一种伪随机数种子生成方法,按如下步骤进行:

第一步:通过AD转换器采样传感器数据,或读取系统时间或开机时长数据,得到数据的初值,但初值大于最大可取伪随机数;

第二步:采用按权分段法将数据初值分成若干个子数据;

第三步:将得到的若干个子数据进行组合运算得到数据中间值,若该中间值符合随机数取值要求,即得到伪随机数种子;若该中间值依然比伪随机数种子大,重复第二步和本步,直到得到符合要求的伪随机数种子,或采用截断处理直接得到伪随机数种子;

其特征是:第二步按权分段法,选取位数比最大可取伪随机数位数多1位的最小数到最高数位的权仅次于最大可取伪随机数最高数位的权的最大数之间的任一数字为基数,以该基数的0、1、2……n次方(n为自然数)为权重,将对象数据分成若干个数据之和,再除以对应权重后得到若干个子数据。

2.根据权利要求1所述的一种伪随机数种子生成方法,其特征是按权分段法取最大可取伪随机数为按权分段的基数。

3.一种伪随机数种子生成方法,其进行步骤包括:第一步:通过AD转换器采样传感器数据,或读取系统时间或开机时长数据,得到数据的初值,但初值位数小于伪随机数位数;

其特征是:

第二步:采用镜像法得到数据初值的镜像数据;

第三步:将镜像数据乘以W的N次方,W为采用的进位计数制基数,N为自然数,N等于数据初值位数,使之放大到2倍数据初值位数;或者,当随机数位数大于等于2倍数据初值位数时,N等于数据初值位数,使初值镜像放大到2倍数据初值位数;当随机数位数小于2倍数据初值位数时,N等于随机数位数与数据初值位数之差,使初值镜像放大到刚好等于伪随机数的位数;用0替换掉所得数据的低端位数等于数据初值位数的部分,再与数据初值进行加运算或者非进位加运算,得到数据中间值;若该中间值大于伪随机数种子位数,采用截断处理得到伪随机数种子;若该中间值依然比伪随机数种子位数小,重复第二步和本步,直到得到符合要求的伪随机数种子。

4.根据权利要求3所述的一种伪随机数种子生成方法,其特征是:镜像法按数据的进位计数制,将数据的低端位上的数字与数据高端位上的数字依次对调,得到新数据。

5.根据权利要求3所述的一种伪随机数种子生成方法,其特征是:第三步中,将数据初值与初值镜像互换,进行第三步中的运算处理过程,得到符合要求的伪随机数种子。

说明书 :

一种伪随机数种子生成方法

技术领域

[0001] 本发明属于计算机算法领域,具体地说涉及一种计算机、特别是单片机适用的伪随机数种子生成方法。

背景技术

[0002] 随机数在信息通讯、数据加密、计算机数据处理等领域应用广泛,特别是在无线通信防碰撞设计、数据加密通讯和认证等技术领域,随机数是关键基础和安全的保障。
[0003] 在计算机或单片微机中使用的随机数并非严格意义上的“随机数”,而是按照一定的数学方法产生的数列,但只要这种数列符合均匀性、抽样随机性等统计要求,便被当作随机数来使用,并称为伪随机数。
[0004] 计算机伪随机数的生成需要一个高随机性的种子(初值),通过一定的算法,生成伪随机数列,从中选取伪随机数使用。种子的取得多种多样,大多通过采样各类传感器数据、读取存储器或寄存器数据、读取时间或开机时长数据、人工输入数据、预先保存的数据等方式获取。
[0005] 不同的计算机或处理器系统的硬件资源不同,而且数据处理系统需要的随机数的范围也各不相同。通过上述方式取得的种子往往不适合直接使用,需要缩减或者扩展位数,特别是单片机运算资源有限,需要对种子先期处理,提高种子的随机性和适用性。通常对种子仅做简单的截取或拼接后使用,或者不做处理直接使用。这样当随机数列仅生成一次,而多次使用随机数仅从该数列中依次选取时,对随机数的随机性影响不大;但如果资源有限,使用随机数时都重新生成数列或使用过程中存在多次生成随机数列时,伪随机数的随机性就大大降低了。

发明内容

[0006] 本发明的目的是提供一种伪随机数种子的生成方法。本发明主要分为三个步骤,根据数据初值的大小,分两种情况,采用两种不同的处理方法生成伪随机数种子。
[0007] 本发明的生成方法按如下步骤实现:
[0008] (1)第一步:通过AD转换器采样传感器(如温度传感器)数据,或读取系统时间或开机时长数据,得到数据的初值,但初值位数不满足随机数取值范围要求。
[0009] (2)第二步:
[0010]  1)当数据初值位数大于随机数的位数或数据初值大于最大可取随机数时,采用按权分段法将数据初值分成若干个子数据。
[0011]  2)当数据初值位数小于随机数的位数时,采用镜像法得到数据初值的镜像数据。
[0012] (3)第三步:
[0013]  1)当数据初值位数大于随机数的位数或数据初值大于最大可取随机数时,将得到的若干个子数据进行非进位加运算得到伪随机数种子;或者将得到的若干个子数据进行累加得到数据中间值,若该中间值符合随机数位数要求,即得到伪随机数种子。若该中间值依然比伪随机数种子位数多,重复第二步和本步,直到得到符合要求的伪随机数种子,或采用截断处理直接得到伪随机数种子。
[0014] 2)当数据初值位数小于随机数的位数时,将得到的初值镜像数据乘以W的N次方。其中W为采用的进位计数制基数,N为自然数,N等于数据初值位数。或者,当随机数位数大于等于2倍数据初值位数时,N等于数据初值位数,使初值镜像放大到2倍数据初值位数。反之当随机数位数小于2倍数据初值位数时,N等于随机数位数与数据初值位数之差,使初值镜像放大到刚好等于伪随机数的位数。使用0替换掉所得数据的低端位数等于数据初值的部分,再与数据初值进行加运算或者非进位加运算。或者将数据初值与初值镜像对调进行上述运算处理,得到数据中间值。若该中间值大于伪随机数种子位数,采用截断处理得到伪随机数种子;若该中间值依然比伪随机数种子位数少,重复第二步和本步,直到得到符合要求的伪随机数种子。
[0015] 所述的按权分段法是指选取某个数做为基数——该基数应在位数比最大可取伪随机数位数多1位的最小数,到最高数位的权仅次于最大可取伪随机数最高数位的权的最大数之间,宜取最大可取伪随机数,或比最大可取伪随机数位数多1位的最小数——以该基数的0、1、2……n次方(n为自然数)为权重,将对象数据分成若干个数据之和,再除以对应权重后得到若干个子数据段的方法。
[0016] 所述的镜像法是指按数据的进位计数制,将数据的低端位上的数字与数据高端位上的数字依次对调,即第0位与最高位、第1位次高位,依次类推地对调,得到新数据的方法。
[0017] 所述的截断处理是指从数据的低端或者高端,去掉一定位数的数据位,保留另一端数据位为新数据的处理方法。
[0018] 所述的非进位加运算是指数据进行加法运算,当任何数据位相加有进位产生时,都舍掉进位,仅保留非进位部分的运算方法,当采用二进制时即为异或。
[0019] 作为优选,所述的按权分段法选用10的自然数幂指数或者16的自然数幂指数为基数。
[0020] 作为优选,所述的截断处理从数据的高端截掉,保留低端数据。

具体实施方式

[0021] 实施例1
[0022] 采用10进制数,生成0到10000的随机整数(0到10000的随机数主要集中在4位数区域,因此可认为随机数位数为4)。
[0023] 第一步:从9位AD中采样温度传感器数据,得到数据初值为185;
[0024] 第二步:数据初值185偏小,位数为3,应使用镜像法进行扩展。将个位数5与百位数1对调,十位数8居正中无须对调,得到初值镜像581;
[0025] 第三步:①随机数主要集中在4位数位数,数据初值位数为3,其位数差为1,因此可以将初值镜像581乘以10的1次方,得到5810,使用“0”替换低3位得到5000,与初值相加,得到伪随机数种子5185;②或者数据初值位数为3,直接将初值镜像581乘以10的3次方,得到581000,与数据初值相加,得到581185,截断高2位数据,得到伪随机数种子1185,或者截断低2位数据,得到伪随机数种子5811;③或者随机数主要集中在4位数位数,数据初值位数为
3,其位数差为1,将数据初值185乘以10的1次方, 得到1850,使用“0”替换低3位得到1000,与初值镜像相加,得到伪随机数种子1581;④数据初值位数为3,直接将数据初值185乘以10的3次方,得到185000,与初值镜像相加,得到185581,截断高2位数据,得到伪随机数种子
5581,或者截断低2位数据,得到伪随机数种子1185。
[0026] 实施例2
[0027] 采用2进制数,生成0到10000(二进制为10011100010000)的随机数(随机数种子宜为13位)。
[0028] 第一步:从9位AD中采样温度传感器数据,得到数据初值为185(0b010111001);
[0029] 第二步:数据初值0b010111001为9位,小于伪随机数种子的适宜位数13位,将数据初值0b010111001做镜像对调,即第0位与第8位对调,第1位与第7位对调……第4位自身对调仍为第4位,得到初值镜像0b100111010;
[0030] 第三步:①伪随机数种子位数与数据初值位数之差为4,将初值镜像0b100111010乘以2的4次方(左移4位),得到0b1001110100000,使用“0”替换低9位(与0x1E00求与)得到0b1001100000000,与数据初值0b010111001相加,得到伪随机数种子0b1001110111001(5049);②或者数据初值位数为9位,直接将初值镜像乘以2的9次方,得到
0b100111010000000000,与数据初值相加,得到0b100111010010111001,截断高5位数据,得到伪随机数种子0b1010010111001(5305),或者截断低5位数据,得到伪随机数种子
0b1001110100101(5029);③或者伪随机数位数为13位,数据初值位数为9,其位数差为4,将数据初值0b010111001乘以2的4次方, 得到0b0101110010000,使用“0”替换低9位得到
0b0101000000000,与初值镜像相加,得到伪随机数种子0b0101100111010(2874);④数据初值位数为9,直接将数据初值0b010111001乘以2的9次方,得到0b010111001000000000,与初值镜像0b100111010相加,得到0b010111001100111010,截断高5位数据,得到伪随机数种子
0b1001100111010(4922),或者截断低2位数据,得到伪随机数种子0b0101110011001(2969)。
[0031] 实施例3
[0032] 采用10进制数,生成0到100的随机整数(随机数种子宜为2位)。
[0033] 第一步:从9位AD中采样温度传感器数据,得到数据初值为185;
[0034] 第二步:数据初值185为3位,比随机数种子位数多1位,且比可取伪随机数大。使用按权分段法,取最大可取伪随机数100为基数,使用1000和1001为权重将数据185拆分为100加85,分别除以对应权重得到子数据1和85;
[0035] 第三步:数据初值位数大于随机数种子位数,使用按权分段处理。将子数据1和85相加(或非进位加),得到伪随机数种子86。
[0036] 实施例4
[0037] 采用2进制数,生成0到100(二进制为0b1100100)的随机数(随机数种子宜为7位)。
[0038] 第一步:从9位AD中采样温度传感器数据,得到数据初值为0b010111001;
[0039] 第二步:数据初值0b010111001的有效数据为0b10111001,位数为8,比随机数种子位数长,且比最大可取伪随机数大。使用按权分段法,取位数比随机数种子大1的最小数270 7
(0b10000000  ,即128)为基数,使用2 和2 为权重将数据初值0b010111001拆分为
0b10000000加0b111001,分别除以对应权重得到子数据0b1和0b111001;
[0040] 第三步:数据初值位数大于随机数种子位数,使用按权分段处理。将子数据0b1和0b111001相加,得到伪随机数种子0b111010(58);或将子数据0b1和0b111001异或,得到伪随机数种子0b111000(56)。