随机数生成器

随机数生成器
随机数生成器

湖北轻工职业技术学院

实验报告

题目:随机数生成器

专业:电子信息工程技术

姓名:

学号:

班级:10电信

指导老师:

2012年5月29日

目录

引言 (3)

一、总体方案的设计 (4)

二、单元电路的设计 (4)

(一) NE555的引脚与功能 (4)

(二) CD4017的引脚与功能 (5)

(三)实物正反面图 (6)

三、使用元件 (7)

四、电路组装\调试过程中遇到的问题及解决办法 (7)

五、分析与心得 (8)

引言

随机数是专门的随机试验的结果。随机数最重要的特性是:它所生成的后面的那个数与前面的那个数毫无关系。首先需要声明的是,计算机不能生成绝对随机的随机数(“真随机数”),只能生成“伪随机数”。其实绝对随机的随机数只是一种理想的随机数,即使计算机怎样发展,它也不会生成一串绝对随机的随机数。计算机只能生成相对的随机数,即伪随机数。未来的量子计算机有可能生成基于自然规律的不可重现的“真随机数”。在统计学的不同技术中需要使用随机数。比如:1、在从统计总体中抽取有代表性的样本的时候2、在将实验动物分配到不同的试验组的过程中3、在进行蒙特卡罗模拟法计算的时候等等。实际生活中,这些随机数起着很大的作用,所以很多人会专门去寻找随机数生成器。比如:1、对银行来说,银行的ID和密码非常脆弱。如果有随机数表,就可以防备此类事件。随机数表是指为每个客户指定各不相同的数字列表,申请时将该随机数表分配给客户,而不是按照一定的规律给出,这就安全很多。2、要考察某公司的牛奶产品质量,想从800袋牛奶中抽取60袋,就可以在随机数表中选中一数,并用向上、下、左、右不同的读法组成60个数,并按牛奶的标号进行检测,虽然麻烦,但很常用。3、企业要调查消费者对某产品的需求量,要从很多消费者中抽选一定数量的样本调查。

一、总体方案的设计

随机数生成器电路如下图所示,

二、单元电路的设计

(一) NE555的引脚与功能

1.引脚图

引脚图

2.功能

NE555为8脚时基集成电路,应用十分广泛,可装如下几种电路:

单稳类-----作用:定延时,消抖动,分(倍)频,脉冲输出,速率检测等。双稳类-----作用:比较器,锁存器,反相器,方波输出及整形等。

无稳类-----作用:方波输出,电源变换,音响报警,玩具,电控测量,定时等。

(二) CD4017的引脚与功能

1.引脚图

2.功能

CD4017 是5 位Johnson 计数器,具有10 个译码输出端,CP、CR、INH 输入端。时钟输 cd4017入端的斯密特触发器具有脉冲整形功能,对输入时钟脉冲上升和下降时间无限制。INH 为低电平时,计数器在时钟上升沿计数;反之,计数功能无效。CR 为高电平时,计数器清零。

Johnson 计数器,提供了快速操作、2 输入译码选通和无毛刺译码输出。防锁选通,保证了正确的计数顺序。译码输出一般为低电平,只有在对应时钟周期内保持高电平。在每10 个时钟输入周期CO 信号完成一次进位,并用作多级计数链的下级脉动时钟。

CD4017 提供了16 引线多层陶瓷双列直插(D)、熔封陶瓷双列直插(J)、塑料双列直插(P)和陶瓷片状载体(C)4 种封装形式。

(三)实物图

①正面

②反面

三、使用元件

四、电路组装\调试过程中遇到的问题及解决办法

1.根据设计组装电路。

2.对各个元件进行检测,对不能工作的元件及时更换。以保证接下来的组

装及调试工作能够正常的进行。

3.在组装电路中,由于是初次焊接电路板,有时焊点过大或焊接不牢固,

导致电路不能正常工作。经过多次的练习克服焊接中出现的问题。

4.组装电路后检查无误方可通电,输入计数脉冲,进行基数。

5.首先对计数进行清零。

6.对电路进行通电检查,对有问题的元件进行更换,然后再进行调试,直

至达到设计的最终效果。

五、分析与心得

刚开始得到这个课题是时候我们都很迷茫,但逐渐的找到了思路。通过一天的时间查找资料,了解课题,然后开始着手焊接电路板。在焊接电路板的过程中出项了很多问题,我们在赵老师的指导下,一一的解决了这些问题,从中又学会了很多知识。

在本次实习过程中,我们在电子元件的识别与测试、电子元件的焊接、电子测试仪器的使用、电路的调试等方面得到了训练。通过自己动手掌握了一定的操作技能,和组员共同的完成了作品。拓宽了自己的视野,学会了很多课堂上老师没有讲授的内容。同时为我今后的学习带来了很大的帮助,具有很好的指导作用。

随机数生成算法的研究

随机数生成算法的研究 [日期:2006-05-23] 来源:作者:[字体:大中小] 张敬新 摘要:本文通过流程图和实际例程,较详细地阐述了随机数生成的算法和具体的程序设计,分析了其符合算法特征的特性。 关键词:随机数;算法;算法特征;程序设计 1 引言 在数据结构、算法分析与设计、科学模拟等方面都需要用到随机数。由于在数学上,整数是离散型的,实数是连续型的,而在某一具体的工程技术应用中,可能还有数据值的范围性和是否可重复性的要求。因此,我们就整数随机数和实数随机数,以及它们的数据值的范围性和是否可重复性,分别对其算法加以分析和设计。以下以Visual Basic 语言为工具,对整数随机数生成问题加以阐述,而对于实数随机数生成问题,只要稍加修改就可转化为整数随机数生成问题。 根据整数随机数范围性和是否可重复性,可分为: (1)某范围内可重复。 (2)某范围内不可重复。 (3)枚举可重复。 (4)枚举不可重复。 所谓范围,是指在两个数n1和n2之间。例如,在100和200之间这个范围,那么,只要产生的整数随机数n满足100≤n≤200,都符合要求。所谓枚举,是指有限的、已知的、若干个不连续的整数。例如,34、20、123、5、800这5个整数就是一种枚举数,也就是单独可以一个个确定下来。 2 某范围内可重复 在Visual Basic 语言中,有一个随机数函数Rnd。 语法:Rnd[(number)]。 参数number 可选,number 的值决定了Rnd 生成随机数的方式。Rnd 函数返回小于1 但大于或等于0 的值。

在调用Rnd 之前,先使用无参数的Randomize 语句初始化随机数生成器,该生成器具有一个基于系统计时器的种子。 若要生成某给定范围内的随机整数,可使用以下公式: Int((upperbound - lowerbound + 1) * Rnd + lowerbound) 这里,upperbound 是此范围的上限,而lowerbound 是范围的下限。 程序流程图: 程序例程:下面是一个生成10个10~20之间随机数的例子。 运行结果:12 10 20 20 17 17 18 14 12 20 3 某范围内不可重复

VHDL产生伪随机数

Library IEEE ; use IEEE.std_logic_1164.all ; use IEEE.std_logic_arith.all ; entity lfsr is generic (data_width : natural := 8 ); port ( clk : in std_logic ; reset : in std_logic ; data_out : out UNSIGNED(data_width - 1 downto 0) ); end lfsr ; architecture rtl of lfsr is signal feedback : std_logic ; signal lfsr_reg : UNSIGNED(data_width - 1 downto 0) ; begin feedback <= lfsr_reg(7) xor lfsr_reg(0) ; latch_it : process(clk,reset) begin if (reset = '1') then lfsr_reg <= (others => '0') ;

elsif (clk = '1' and clk'event) then lfsr_reg <= lfsr_reg(lfsr_reg'high - 1 downto 0) & feedback ; end if; end process ; data_out <= lfsr_reg ; end RTL ; Reference URL:https://www.360docs.net/doc/b36252814.html,/eda/edasrc/6153.html

随机数生成器

随机数生成器 一、随机数 1.1随机数的概念 数学上是这样定义随机数的:在连续型随机变量的分布中,最简单而且最基本的分布是单位均匀分布。由该分布抽取的简单子样称为随机数序列,其中每一个体称为随机数。单位均匀分布即[0,1]上的均匀分布。由随机数序列的定义可知,ξ1,ξ2,…是相互独立且具有相同单位均匀分布的随机数序列。也就是说,独立性、均匀性是随机数必备的两个特点。 1.2随机数的分类 随机数一般分为伪随机数和真随机数。利用数学算法产生的随机数属于伪随机数。利用物理方法选取自然随机性产生的随机数可以看作真随机数。实用中是使用随机数所组成的序列,根据所产生的方式,随机数序列再可以分为两类: 1.伪随机数序列 伪随机数序列由数学公式计算所产生。实质上,伪随机数并不随机,序列本身也必然会重复,但由于它可以通过不同的设计产生满足不同要求的序列且可以复现(相同的种子数将产生相同的序列),因而得到广泛的应用。由伪随机数发生器所产生的伪随机数序列,只要它的周期足够长并能通过一系列检验,就可以在一定的范围内将它当作真随机数序列来使用。 2.真随机数序列 真随机数序列是不可预计的,因而也不可能出现周期性重复的真正的随机数序列。它只能由随机的物理过程所产生,如电路的热噪声、宇宙噪声、放射性衰变等。 按照不同的分类标准,随机数还可分为均匀随机数和非均匀随机数,例如正态随机数。 1.3随机数的衡量标准 在实际模拟过程中,我们一般只需要产生区间[0,1]上的均匀分布随机数,因为其他分布的随机数都是由均匀分布的随机数转化来的。 实用中的均匀随机数主要通过以下三个方面来衡量其随机性能的高低。 1.周期性 伪随机数序列是由具有周期性的数学公式计算产生,其本身也必然会表现出周期性,即序列中的一段子序列与另一段子序列相同。它的周期必须足够长,才能为应用提供足够多的可用数据。只有真随机数序列才能提供真正的、永不重复的随机数序列。 2.相关性 随机数发生器所产生的一个随机数序列中的各个随机数应该不相关,所产生的各个随机数序列中的随机数也应该不相关。真随机数序列自然地满足这种不相关性。对于伪随机数发生器,应该仔细地设计所用的数学公式,以尽量满足不相关的要求。 3.分布均匀性 包括蒙特卡洛计算在内的大多数应用都要求所采用的随机数序列服从均匀分布,即同一范围内的任一个数出现的概率相同。从均匀分布的随机数序列也很容易导出其它类型分布的

MATLAB随机数生成

2009年03月20日星期五 03:25 P.M. rand(n):生成0到1之间的n阶随机数方阵 rand(m,n):生成0到1之间的m×n 的随机数矩阵 (现成的函数) 另外: Matlab随机数生成函数 betarnd 贝塔分布的随机数生成器 binornd 二项分布的随机数生成器 chi2rnd 卡方分布的随机数生成器 exprnd 指数分布的随机数生成器 frnd f分布的随机数生成器 gamrnd 伽玛分布的随机数生成器 geornd 几何分布的随机数生成器 hygernd 超几何分布的随机数生成器 lognrnd 对数正态分布的随机数生成器 nbinrnd 负二项分布的随机数生成器 ncfrnd 非中心f分布的随机数生成器 nctrnd 非中心t分布的随机数生成器 ncx2rnd 非中心卡方分布的随机数生成器 normrnd 正态(高斯)分布的随机数生成器 poissrnd 泊松分布的随机数生成器 raylrnd 瑞利分布的随机数生成器 trnd 学生氏t分布的随机数生成器 unidrnd 离散均匀分布的随机数生成器 unifrnd 连续均匀分布的随机数生成器 weibrnd 威布尔分布的随机数生成器 (From:https://www.360docs.net/doc/b36252814.html,/question/30033707.html) matlab生成随机数据 matlab本身提供很多的函数来生成各种各样的随机数据: normrnd 可以生成一定均值和标准差的正态分布 gamrnd 可以生成gamma分布的伪随机数矩阵 chi2rnd 可以生成卡方分布的伪随机数矩阵 trnd 可以生成t分布的伪随机数矩阵 frnd 可以生成f分布的伪随机数矩阵 raylrnd 可以生成rayleigh分布的伪随机数矩阵

随机数生成方法

University of Sydney School of Information Technologies Generating Random Variables Pseudo-Random Numbers Definition : A sequence of pseudo-random numbers ()i U is a deterministic sequence of numbers in []1,0 having the same relevant statistical properties as a sequence of random numbers. The most widely used method of generating pseudo-random numbers are the congruential generators: ()M X U M c aX X i i i i =+=?mod 1 for a multiplier a , shift c , and modulus M , all integers. The sequence is clearly periodic, with maximum period M . The values of a and c must be carefully chosen to maximise the period of the generator, and to ensure that the generator has good statistical properties. Some examples: M a c 259 1313 0 232 69069 1 231-1 630360016 0 232 2147001325 715136305 Reference: Ripley, Stochastic Simulation , Chapter 2

伪随机数列发生器-TsouShih

8位伪随机数列发生器 天津工业大学理学院 XXX XXXXXXX 2011年12月09日

背景 如果一个序列,一方面它是可以预先确定的,并且是可以重复地生产和复制的;一方面它又具有某种随机序列的随机特性(即统计特性),我们便称这种序列为伪随机序列。因此可以说,伪随机序列是具有某种随机特性的确定的序列。它们是由移位寄存器产生确定序列,然而他们却具有某种随机序列的随机特性。因为同样具有随机特性,无法从一个已经产生的序列的特性中判断是真随机序列还是伪随机序列,只能根据序列的产生办法来判断。伪随机序列系列具有良好的随机性和接近于白噪声的相关函数,并且有预先的可确定性和可重复性。这些特性使得伪随机序列得到了广泛的应用,特别是在CDMA系统中作为扩频码已成为CDMA技术中的关键问题。伪随机序列的特性对系统的性能有重要的影响,因此有必要了解和掌握伪随机序列的的概念和特性。 原理 伪随机数列的概念与特性 伪随机数列也称作PN码。它具有近似随机数列(噪声)的性质,它的相关函数接近白噪声的相关函数 (Δ函数 ),即有窄的高峰或宽的功率谱密度 ,使它易于从其他信号或干扰中分离出来。而又能按一定的规律(周期)产生和复制的序列。因为随机数列是只能产生而不能复制的,所以称其为“伪”随机数列。广泛应用于通信、雷达、导航等重要的技术领域。近年来 ,在自动控制、计算机、声学、光学测量、数字式跟踪和测距系统 ,以及数字网络系统的故障分析检测也得到广泛的应用。 伪随机数列具有这样的特点: (1)每个周期中,“1”码出现2n-1次,“0”码出现2n-1次,即0、1出现概率几乎相等。 (2)序列中连1的数目是n,连0的数目是n-1。 (3)分布无规律,具有与白噪声相似的伪随机特性。

随 机 数 生 成 器

使用python实现伪随机数生成器 在前两天学习了使用python实现伪随机数的方法,今天是时候来做一个总结了。 首先要说明的是什么是随机数,真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等。产生这些随机数的方法有很多种,而这些产生随机数的方法就称为随机数生成器。像前面说的由物理现象所产生的随机数发生器叫做物理性随机数发生器,它们的缺点是技术要求比较高。 但是在我们的实际生活中广泛应用的是伪随机数生成器,所谓的“伪”就是假的的意思,也就是说并不是真正的随机数。那么这些随机数是怎么实现的呢?这些数字是由固定的算法实现的,是有规律可循的,并不能实现真正的“随机”,但是它们具有类似于随机数的统计特征。这样的发生器叫做伪随机数发生器。 实现伪随机数的方法有很多种,如:平方取中法,线性同余法等方法。 下面主要介绍的是线性同余法,如C的rand函数和JAVA的java.util.Random类就是使用该方法实现的,其公式为:rNew = (a*rOld + b) % (end-start) 其中, a称为乘数,b称为增量,(end-start)称为模数,它们均为常数。 然后设置rOld = rNew,一般要求用户指定种子数rOld(也称为

seed),当然也可以自由选择a和b,但是两个数如果选择不好,可能会影响数字的随机性,所以一般令: a=32310901 这样使得生成的随机数最均匀。下面我是用的将种子自定义设为999999999。代码如下: def myrandint( start,end,seed=999999999 ): a=32310901 #产生出的随机数最均匀 rOld=seed m=end-start while True: #每调用一次这个myrandint函数,才生成一次随机数所以要惰性求值 rNew = (a*rOld+b)%m yield rNew rOld=rNew #模拟使用20个不同的种子来生成随机数 for i in range(20): r = myrandint(1,10000, i) #每个种子生成10个随机数 print('种子',i,'生成随机数') for j in range(10): print( next(r),end=',' ) 运行结果是使用20个不同的种子生成的随机数。

信息安全基础综合实验讲义(伪随机数产生器)-2012版

第二部分 伪随机数产生器实验 在密码技术中,建立单个数是“随机的”并没有意义。对随机性的要求总是基于数的序列而言。真正的随机数符合均匀分布且其生成不能重现。计算机通过算法产生的随机数并不是真正意义上的随机数序列,只能称为伪随机数序列。产生伪随机数序列的算法称为伪随机数产生器。产生高质量的伪随机数序列对信息的安全性具有十分重要的作用,比如密钥产生、数字签名、身份认证和众多的密码学协议等都要用到随机序列。 一、实验目的 熟悉常用的伪随机数产生器算法。运用高级程序设计语言实现一种伪随机数产生器算法的程序,加深对伪随机数产生器算法的理解。 二、实验原理 计算机产生的随机数是使用确定的算法计算出来的。一旦知道了随机数算法和初始种子,就能够知道随机序列中任何一个随机数的值,因此,计算机产生的随机数是一种伪随机数。伪随机数的生成算法称为伪随机数产生器。伪随机数有多种生成算法。 1. 线性同余算法 到目前为止,使用最为广泛的随机数产生技术是由Lehmer 首先提出的称为线性同余算法,即使用下面的线性递推关系产生一个伪随机数列x 1,x 2,x 3,… 这个算法有四个参数,分别是: a 乘数 0 ≤ a < m c 增量 0 ≤ c < m m 模数 m > 0 x 0 初始种子(秘密) 0 ≤ x 0 < m 伪随机数序列{ x n }通过下列迭代方程得到: 1()mod n n x ax c m +=+ 如果m 、a 、c 和x 0都是整数,那么通过这个迭代方程将产生一系列的整数,其中每个数都在0 ≤ x n < m 的范围内。数值m 、a 和c 的选择对于建立一个好的伪随机数产生器十分关键。为了形成一个很长的伪随机数序列,需要将m 设置为一个很大的数。一个常用准则是将m 选为几乎等于一个给定计算机所能表示的最大非负整数。因而,在一个32位计算机上,通常选择的m 值是一个接近或等于231的整数。此外,为了使得随机数列不易被重现,

随机数生成器功能:1,产生一个随机概率,.doc

随机数生成器功能:1,产生一个随机概率, 2产生一个a到b之间的随机整数 3,产生一个指定长度的随机数组,里面存放随机的布尔值,表示染色体 package edu.zsu.zouang.util;//java.util中的Random使用指定的伪随机原随即更改指定列表的序列 import java.util.Random;//import导入,导入random类,用于产生伪随机数流 public class Randomizer { private int lower; private int upper; private static Random random = new Random();//生成random实例 public Randomizer(int lower, int upper){ if(upper <= lower){ throw new IllegalStateException("Upper is smaller than lower!"); } this.lower = lower; this.upper = upper; } public Double nextDouble(){//返回概率 return Double. (upper - lower) * random.nextDouble()); }//Random中double nextDouble()返回下一个伪随机数,它是从伪随机数生成器的序列中取出的在0.0到1.0之间的double值 //double.valueof(str)说明把str转化成double类型的对象,相当于强制转换 public Integer nextInteger(){//返回整数lower到upper之间 return Integer.valueOf(lower +random.nextInt(upper - lower)); }//Random(int)返回0到int之间的整数随机值 public char[] nextBitArray(int length){//生成指定长度的字符数组,存放基因系列 if(length <= 0){ throw new IllegalStateException("Length is less than ZERO!"); } char[] temp = new char[length]; for(int i = 0; i < length ; i++){ temp[i] = random.nextBoolean() ? '1' : '0'; }//Random.nextBoolean()返回随机的bool值

MATLAB伪随机数发生器

MATLAB伪随机数发生器.txt生活是过出来的,不是想出来的。放得下的是曾经,放不下的是记忆。无论我在哪里,我离你都只有一转身的距离。 均匀性较好的随机数生成 zz from https://www.360docs.net/doc/b36252814.html,/lanmuyd.asp?id=3379 随机数生成算法[1]是一类重要的算法,广泛应用于仿真技术等场合。然而,目前的伪随机数生成器(Pseudo-random number generator, PRNG)[2]存在一个重要缺陷,即样本分布与真实分布不一致,这主要发生在以下两种情况:①抽样代价过高,样本数目较少;②空间维数较高[3]。 因此,有必要寻找一类新的随机数发生器。准随机数发生器(Quasi-random number generator,QRNG)[4]能够生成稳定、低差异性的(low-discrepancy)样本,而与样本数目或空间维数无关[5]。故针对蒙特卡罗积分结果不稳定的情况,提出一种基于QRNG的蒙特卡罗积分,发现比传统方法性能有所提升。 伪随机数介绍 伪随机数是由确定的算法生成的,其分布函数与相关性均能通过统计测试。与真实随机数的差别在于,它们是由算法产生的,而不是一个真实的随机过程。一般地,伪随机数的生成方法主要有以下3种[6]: (1)直接法(Direct Method),根据分布函数的物理意义生成。缺点是仅适用于某些具有特殊分布的随机数,如二项式分布、泊松分布。 (2)逆转法(Inversion Method),假设U服从[0,1]区间上的均匀分布,令X=F-1(U),则X的累计分布函数(CDF)为F。该方法原理简单、编程方便、适用性广。 (3)接受拒绝法(Acceptance-Rejection Method):假设希望生成的随机数的概率密度函数(PDF)为f,则首先找到一个PDF为g的随机数发生器与常数c,使得f(x)≤cg(x),然后根据接收拒绝算法求解。由于算法平均运算c次才能得到一个希望生成的随机数,因此c的取值必须尽可能小。显然,该算法的缺点是较难确定g与c。 因此,伪随机数生成器(PRNG)一般采用逆转法,其基础是均匀分布,均匀分布PRNG 的优劣决定了整个随机数体系的优劣[7]。下文研究均匀分布的PRNG。 伪随机数生成器的缺点 重复做N=10000次试验,每次产生S=20与S=100个随机分布的样本,同时采用Kolmogorov- Smirnov假设检验(hypothesis test)来确定样本是否满足均匀分布。规定: ① 0假设(null hypothesis)为样本服从均匀分布;② 1假设(alternative hypothesis)为样本不服从均匀分布。 采用P值(∈[0, 1])衡量,P值越趋近于0,表示越有理由拒绝0假设,即样本不服从均匀分布;P值越趋近于1,表示越有理由接受0假设,即样本服从均匀分布。 如图1与图2所示:随着P值下降,样本也越来越不服从均匀分布。实践中希望P值越大越好。然而统计学的结论显示,P值一定服从均匀分布,与N、S大小无关,这表明由于随机性,总会出现某次抽样得到的样本不服从、甚至远离均匀分布。另外,样本大小的不同,造成检验标准的不同,直观上看S=100对应的均匀分布普遍比S=20对应的更均匀。因此,小样本情况下均匀分布PRNG的差异性尤为严重。

用C语言的rand()和srand()产生伪随机数的方法总结

标准库(被包含于中)提供两个帮助生成伪随机数的函数: 函数一:int rand(void); 从srand(seed)中指定的seed开始,返回一个[seed,RAND_MAX(0x7fff))间的随机整数。 函数二:void srand(unsigned seed); 参数seed是rand()的种子,用来初始化rand()的起始值。 可以认为rand()在每次被调用的时候,它会查看: 1)如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用srand(seed)一次来初始化它的起始值。 2)如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。 根据上面的第一点我们可以得出: 1)如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的seed一个变值,这个变值必须在每次程序运行时都不一样(比如到目前为止流逝的时间)。 2)否则,如果给seed指定的是一个定值,那么每次程序运行时rand()产生的值都会一样,虽然这个值会是[seed,RAND_MAX(0x7fff))之间的一个随机取得的值。 3)如果在调用rand()之前没有调用过srand(seed),效果将和调用了srand(1)再调用rand()一样(1也是一个定值)。 举几个例子,假设我们要取得0~6之间的随机整数(不含6本身): 例一,不指定seed: for(int i=0;i<10;i++){ ran_num=rand()%6; cout<

伪随机数发生器

伪随机数发生器程序说明文档 ——《密码编码学与网络安全》实验六一、基本变量、数据结构、函数说明: 注意:基本变量、数据结构、函数说明和实验二DES算法是一样的。没有任何变化。 1.基本变量定义部分: flag:boolean型变量,用于标识是解密还是加密过程。 2.数据结构定义部分: DT64:int型一维数组,64位的随机时间串。 V64: int型一维数组,64位的种子值。 sum64:int型一维数组,用于存储模二加的中间结果。 R64:int型一维数组,用于存储64位伪随机数。 bytekey:byte型一维数组,用于存储密钥及其子密钥字节流信息。 IP:int型一维数组,静态,用于存储初始置换矩阵。 IP_1:int型一维数组,静态,用于存储初始置换矩阵的逆矩阵。 PC_1:int型一维数组,静态,用于存储置换选择矩阵1。 PC_2:int型一维数组,静态,用于存储置换选择矩阵2。 E:int型一维数组,静态,用于存储扩充置换矩阵。 P:int型一维数组,静态,用于置换函数矩阵。 S_Box:int型三维数组,静态,用于SBox矩阵设置。 LeftMove:int型一维数组,静态,用于设置左移位置列表。 keydata:int型一维数组,用于存储二进制加密密钥。 encryptdata:int型一维数组,用于存储二进制加密数据。 EncryptCode:byte型一维数组,用于存储加密操作完成后的字节数组。 KeyArray:int型二维数组,用于存储密钥初试化后的二维数组。 3.基本函数定义: UnitDes:初始化函数,用于将密钥初始化成字节型数组密钥。 KeyInitialize:用于初始化密钥,生成每一轮的子密钥。 Encrypt:每一轮的加密函数。 ReadDataToBirnaryIntArray:将数据转换为二进制数,存储到数组。 LeftBitMove:循环移位操作函数。 LoopF:落实到每一轮的具体操作函数。 GetEncryptResultOfByteArray:将存储64位二进制数据的数组中的数据转换为八个整数(byte)。 ByteDataFormat:字符串数组拼接函数。 DesEncrypt:具体的加、解密函数,由flag控制工作模式。

随 机 数 生 成 器

利用泊松分布实现随机数生成器 不多说,直接上代码,这是在华师大算法课上做的实验代码,C++可运行。 #includeiostream #includetime.h #includecmath using namespace std; class Random { Random(bool pseudo = true); double random_real(); int random_integer(int low, int high); int poisson(double mean); void randomByAvg(double avg,int num); private: int reseed(); -- Re-randomize the seed. int seed,multiplier,add_on; -- constants for use in arithmetic operations Random::Random(bool pseudo) Post: The values of seed, add_on, and multiplier are initialized. The seed is initialized randomly only if pseudo == false.

if (pseudo) seed = 1; else seed = time(NULL) % INT_MAX; multiplier = 2743; add_on = 5923; int Random::reseed() Post: The seed is replaced by a pseudorandom successor. seed = seed * multiplier + add_on; return seed; double Random::random_real() Post: A random real number between 0 and 1 is returned. double max = INT_MAX + 1.0; --INT_MAX = (2)31 -1 double temp = reseed(); if (temp 0) temp = temp + max; return temp - max; int Random::random_integer(int low, int high) Post: A random integer between low and high is returned. if (low high) return random_integer(high, low); else return ((int) ((high - low) * random_real())) + low; int Random::poisson(double mean) Post: A random integer, reflecting a Poisson distribution with parameter mean, is returned. double limit = exp(-mean);

伪随机数产生器

伪随机数产生器 ----------------------------------------------------------------------------- -- -- The following information has been generated by Exemplar Logic and -- may be freely distributed and modified. -- -- Design name : pseudorandom -- -- Purpose : This design is a pseudorandom number generator. This design -- will generate an 8-bit random number using the polynomial p(x) = x + 1. -- This system has a seed generator and will generate 2**8 - 1 unique -- vectors in pseudorandom order. These vectors are stored in a ram which -- samples the random number every 32 clock cycles. This variance of a -- priority encoded seed plus a fixed sampling frequency provides a

truely -- random number. -- -- This design used VHDL-1993 methods for coding VHDL. -- ---------------------------------------------------------------------------- Library IEEE ; use IEEE.std_logic_1164.all ; use IEEE.std_logic_arith.all ; entity divide_by_n is generic (data_width : natural := 8 ); port ( data_in : in UNSIGNED(data_width - 1 downto 0) ; load : in std_logic ; clk : in std_logic ; reset : in std_logic ; divide : out std_logic ); end divide_by_n ;

随机数生成器

湖北轻工职业技术学院 实验报告 题目:随机数生成器 专业:电子信息工程技术 姓名: 学号: 班级:10电信 指导老师: 2012年5月29日

目录 引言 (3) 一、总体方案的设计 (4) 二、单元电路的设计 (4) (一) NE555的引脚与功能 (4) (二) CD4017的引脚与功能 (5) (三)实物正反面图 (6) 三、使用元件 (7) 四、电路组装\调试过程中遇到的问题及解决办法 (7) 五、分析与心得 (8)

引言 随机数是专门的随机试验的结果。随机数最重要的特性是:它所生成的后面的那个数与前面的那个数毫无关系。首先需要声明的是,计算机不能生成绝对随机的随机数(“真随机数”),只能生成“伪随机数”。其实绝对随机的随机数只是一种理想的随机数,即使计算机怎样发展,它也不会生成一串绝对随机的随机数。计算机只能生成相对的随机数,即伪随机数。未来的量子计算机有可能生成基于自然规律的不可重现的“真随机数”。在统计学的不同技术中需要使用随机数。比如:1、在从统计总体中抽取有代表性的样本的时候2、在将实验动物分配到不同的试验组的过程中3、在进行蒙特卡罗模拟法计算的时候等等。实际生活中,这些随机数起着很大的作用,所以很多人会专门去寻找随机数生成器。比如:1、对银行来说,银行的ID和密码非常脆弱。如果有随机数表,就可以防备此类事件。随机数表是指为每个客户指定各不相同的数字列表,申请时将该随机数表分配给客户,而不是按照一定的规律给出,这就安全很多。2、要考察某公司的牛奶产品质量,想从800袋牛奶中抽取60袋,就可以在随机数表中选中一数,并用向上、下、左、右不同的读法组成60个数,并按牛奶的标号进行检测,虽然麻烦,但很常用。3、企业要调查消费者对某产品的需求量,要从很多消费者中抽选一定数量的样本调查。

matlab随机数生成方法

Matlab(https://www.360docs.net/doc/b36252814.html,) 随机数生成方法(转自雅虎空间) 第一种方法是用random 语句,其一般形式为 y = random('分布的英文名',A1,A2,A3,m,n), 表示生成m 行n 列的m × n 个参数为( A1 , A2 , A3 ) 的该分布的随机数。例如: (1) R = random('Normal',0,1,2,4): 生成期望为0,标准差为1 的(2 行4 列)2× 4 个正态随机数 (2) R = random('Poisson',1:6,1,6):依次生成参数为 1 到 6 的(1 行 6 列)6 个Poisson 随机数 第二种方法是针对特殊的分布的语句: 一.几何分布随机数(下面的P,m 都可以是矩阵) R = geornd(P) (生成参数为P 的几何随机数) R = geornd(P,m)(生成参数为P 的× m 个几何随机数) 1 R = geornd(P,m,n)(生成参数为P 的m 行n 列的m × n 个几何随机数) 例如 (1)R = geornd(1./ 2.^(1:6)) ( 生成参数依次为1/2,1/2^2,到1/2^6 的6 个几何随机数) (2)R = geornd(0.01,[1 5]) (生成参数为0.01 的(1行5列)5 个几何随机数). 二.Beta 分布随机数 R = betarnd(A,B)(生成参数为A,B 的Beta 随机数) R = betarnd(A,B,m)(生成× m 个数为A,B 的Beta 随机数) 1 R = betarnd(A,B,m,n)(生成m 行n 列的m × n 个数为A,B 的Beta 随机数). 三.正态随机数 R = normrnd(MU,SIGMA)(生成均值为MU,标准差为SIGMA 的正态随机数) R = normrnd(MU,SIGMA,m)(生成1× m 个正态随机数) R = normrnd(MU,SIGMA,m,n) (生成m 行n 列的m × n 个正态随机数) 例如 (1) R = normrnd(0,1,[1 5]) 生成5 个正态(0,1) 随机数 (2) R = normrnd([1 2 3;4 5 6],0.1,2,3)生成期望依次为[1,2,3;4,5,6], 方差为0.1 的2× 3 个正态随机数. 四.二项随机数:类似地有 R = binornd(N,P)R = binornd(N,P,m) R = binornd(N,p,m,n) 例如 n = 10:10:60; r1 = binornd(n,1./n)或r2 = binornd(n,1./n,[1 6]) (都生成参数分别为 1 1 ), L, ( 60, ) 的6个二项随机数. (10, 10 60

随机数产生器设计报告

摘要 本次随机数产生器的编写主要采用汇编语言来编写的,在程序的编写中通过调用并运行子程序以及其他汇编指令的协调来实现所要达到的功能,程序主要分三大功能,1.随机数的产生,2.确定随机数的上下限,3.将产生的随机数用16进制的ASCII 表示出来,本程序主要有四大模块,1.随机数产生模块;2.数制转换模块;3.字符显示模块;4.运算模块,通过这次汇编语言的程序设计,让我们更加了解了汇编语言,扩展了我们在汇编邻域的知识,让我们掌握了编写实训报告的能力,汇编语言的长处在于编写高效且简单,易懂,需要对机器硬件精确控制的程序。汇编语言比机器语言易于读写、调试和修改,同时具有机器语言全部优点。本次编写的随机数产生器简单易懂,其中的上下线用编写者定义,更加的具有灵活性,此程序突出了汇编语言的简单,灵活,易读写,易修改的特点。 关键词:汇编语言;程序;随机数

目录 1 设计任务 (1) 2任务分析 (2) 2.1 程序功能说明 (2) 2.2 程序要点说明 (2) 3功能及程序设计 (3) 3.1主程序流程图及结构图 (3) 3.2程序说明 (4) 3.3 子程序功能说明 (5) 3.3.1 MACT子程序说明 (5) 3.3.2 RAND子程序说明 (7) 3.3.3 字符串显示子程序说明 (8) 4调试结果及分析 (10) 5心得体会 (12) 6参考文献 (13) 附录: (14) 源代码 (14)

1 设计任务 产生十六进制随机数并对其进行运算是相当多应用程序经常会涉及到的一种功能。实际上,十六进制数有个计数符号:0~9,A~F。4个二进制位共有16种组合状态,这样每个十六进制数的计数符号可对应4位二进制数的一种组合状态;反之,1个十六进制符号可以替代一种4位二进制数的组合状态。在阅读和编写汇编语言程序时,经常用十六进制数表示数据、存储单元地址或代码等。 本次课程设计研究的产生16进制随机数并运算的内容。本程序采用汇编语言编程,建立一个文件,显示任意两个16进制数的加法或减法表达式及其运算结果。在减法运算中,如果被减数小于减数,显示“Divider error”的提示信息。

FPGA产生基于LFSR的伪随机数

1.概念 通过一定的算法对事先选定的随机种子(seed)做一定的运算可以得到一组人工生成的周期序列,在这组序列中以相同的概率选取其中一个数字,该数字称作伪随机数,由于所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了。这里的“伪”的含义是,由于该随机数是按照一定算法模拟产生的,其结果是确定的,是可见的,因此并不是真正的随机数。伪随机数的选择是从随机种子开始的,所以为了保证每次得到的伪随机数都足够地“随机”,随机种子的选择就显得非常重要,如果随机种子一样,那么同一个随机数发生器产生的随机数也会一样。 2.由LFSR引出的产生方法 产生伪随机数的方法最常见的是利用一种线性反馈移位寄存器(LFSR),它是由n个D触发器和若干个异或门组成的,如下图: 其中,gn为反馈系数,取值只能为0或1,取为0时表明不存在该反馈之路,取为1时表明存在该反馈之路;n个D触发器最多可以提供2^n-1个状态(不包括全0的状态),为了保证这些状态没有重复,gn的选择必须满足一定的条件。下面以n=3,g0=1,g1=1,g2=0,g3=1为例,说明LFSR的特性,具有该参数的LFSR结构如下图: 假设在开始时,D2D1D0=111(seed),那么,当时钟到来时,有: D2=D1_OUT=1; D1=D0_OUT^D2_OUT=0; D0=D2_OUT=1; 即D2D1D0=101;同理,又一个时钟到来时,可得D2D1D0=001. ………………

画出状态转移图如下: 从图可以看出,正好有2^3-1=7个状态,不包括全0; 如果您理解了上图,至少可以得到三条结论: 1)初始状态是由SEED提供的; 2)当反馈系数不同时,得到的状态转移图也不同;必须保证g n===1,否则哪来的反馈? 3)D触发器的个数越多,产生的状态就越多,也就越“随机”; 3.verilog实现 基于以上原理,下面用verilog产生一个n=8,反馈系数为 g0g1g2g3g4g5g6g7g8=101110001的伪随机数发生器,它共有2^8=255个状态,该LFSR 的结构如下: verilog源代码如下: moduleRanGen( inputrst_n, /*rst_n is necessary to prevet locking up*/ inputclk, /*clock signal*/ input load, /*load seed to rand_num,active high */ input [7:0] seed,

一维均匀分布随机数序列的产生方法

一维均匀分布随机数序列的产生方法 【摘要】利用混沌的随机数产生算法和线性同余发生器以及MATLAB产生一维均匀分布随机数序列.经过检验,随机数列的统计性质有了很大提高, 【关键词】混沌;线性同余发生器;MATLAB;随机数 1 引言 随机数在信息加密、数值运算及医学中基因序列分析等研究中有着广泛的应用。比如数值运算中,Monte Carlo方法占有重要的地位,随机数是该方法的基础.随机数的质量影响了信息的安全和计算结果的精度。特别是一些安全级别比较高的应用,对随机数提出了很高的要求。随机数可由硬件和软件两种方式产生。在计算机中广泛使用的是软件方式,通过计算机利用数学模拟随机过程产生随机数。此方法有着自身的不足,数据之间有着关联性,存在周期,并非真正的随机数,因此被成为伪随机数。 生成随机数的方法繁多,从产生机理来说,可分为数学方法和物理方法两种,其所产生的随机数分别被称之为伪随机数和真随机数,前者易被破解,后者取自物理世界的真实随机源,难以破解,但这并不代表基于真随机源产生的随机数质量就很高,要取决于产生算法如何利用这个真随机源,相反的,许多用数学方法产生的随机数质量比较好。因此,若能将数学方法和物理方法结合起来,则可能产生高质量的真随机数。常见的产生随机数的方法有【1】线性同余法(LCG,Linear Congruent Generators)、Tarsworthe位移计数器法、Fibonacci延迟产生器法等。为了克服以上方法的缺陷,人们还发展了许多新的方法。组合发生器就是著名的一种。它是将两个随机数发生器进行组合,以一种发生器产生一个随机数列,再用另一个随机数发生器对随机数列进行重修排列,得到一个更为独立,周期更长的随机数列。已有一些利用混沌序列转换伪随机数列的报道【2】,文献【3】虽然提出了一种由logistic映射构造具有均匀性数列的好方法,但数据之间的独立性较差。本研究中提出了一种新的方法,利用混沌算法【4】和线性同余发生器相组合得到随机数列,并就数据的均匀性和独立性进行了检验。 从实现方法来说,有以软件为主、以硬件为主以及软硬结合等方法【5】。 相比于伪随机数发生器的研究而言,真随机数发生器的研究还相当初步。设计一个真随机数发生器包括两步:首先是获取真随机源;然后是利用真随机源依照特定的数学方法获得真随机数。 2 理论基础 一维均匀分布随机数的产生 2.1算法1 在vc的环境下,为我们提供了库函数rand()来产生一个随机的整数.该随机数是平均在0~RAND_MAX之间平均分布的,RAND_MAX是一个常量,在VC6.0环境下是这样定义的: #define RAND_MAX 0x7fff 它是一个short 型数据的最大值,如果要产生一个浮点型的随机数,可以将rand()/1000.0这样就得到一个0~32.767之间平均分布的随机浮点数.如果要使得范围大一点,那么可以通过产生几个随机数的线性组合来实现任意范围内的平均分布的随机数.例如要产生-1000~1000之间的精度为四位小数的平均分布的随机数可以这样来实现.先产生一个0到10000之间的随机整数.方法如下: int a = rand()%10000;

相关文档
最新文档