`
臻是二哥
  • 浏览: 187806 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
Group-logo
Java技术分享
浏览量:0
社区版块
存档分类
最新评论

计算机中的随机数

阅读更多
随机数的性质从弱到强分为3类:
1. 随机性
2. 不可预测性
3. 不可重现性

在上面的三个性质中,越往下就越严格。具备随机性,不代表一定具备不可预测性;具备不可预测性,不代表一定具备不可重现性;但如果具备不可重现性,一定具备随机性和不可预测性。

满足上面的3性依次对应着:弱伪随机数,强伪随机数,真随机数。
在计算机中,用软件生成的随机数都是伪随机数,即弱伪随机数和强伪随机数。由于弱伪随机数不具备不可预测性,因此在密码学中只使用强随机数和真随机数(在密码学中,随机数常常被用于生成密钥,因此具备可预测性是危险的)

至此,我们知道,密码学中使用的随机数一定是强伪随机数或者真随机数。由于真随机数用纯软件产生很困难,因此我们在软件设计中都是用强伪随机数。不过遗憾的是,一些语言提供的随机数生成函数都是弱随机数。比如java.util.Random类生成的就是弱伪随机数,当时java中的java.security.SecureRandom类提供的是强随机数。

下面我们介绍几种伪随机数生成器。
1. 线性同余法
线性同余法生成随机数的过程如下:
第一个伪随机数R0=(A*种子+C) mod M
第二个伪随机数R1=(A*R0+C) mod M
第 N个伪随机数Rn=(A*第N-1个随机数+C) mod M
过程原理如图所示:


可见,线性同余法生成的随机数序列是可预测的,这一点使得他无法应用在密码学中。

2. 单向散列函数法
使用种子作为初始状态,将该状态作为输入,用单项散列函数计算随机数序列。然后使内部状态自增,然后继续使用单项散列函数计算随机数序列。


攻击者若想预测下一个随机数,就得知道内部状态,由于单项散列函数具有单项性,所以这是不可能的。因此单项散列函数法具备不可预测性,可以用在密码学中。

3. 密码法
原理同单项散列函数法,只不过将散列函数换成了密钥而已。




  • 大小: 65.3 KB
  • 大小: 73.6 KB
  • 大小: 73.9 KB
分享到:
评论

相关推荐

    计算机中随机数的产生

    ### 计算机中随机数的产生 #### 引言 在计算机科学领域,随机数的应用十分广泛,从密码学、模拟仿真到游戏开发等众多领域都离不开它。然而,由于计算机本身的工作机制,它并不能生成真正的随机数,而是产生所谓的...

    Java获取计算机信息和产生随机数

    主要是一个Java获取计算机基本信息并且在Web页面上以ExtJs4的图表展示,这里删除了ExtJs4的资源和一个算法产生验证码,因为这个算法最终使用到了产品中,所以就把这个测试的类删除了,各位不好意思了

    意识影响随机数验证程序

    在计算机科学中,随机数生成是常用的一种技术,通常由伪随机数生成器(PRNG)实现。这些算法根据特定的种子产生一系列看似随机的结果,但实际上是可预测的。如果意识真的能影响随机数,那么在进行大量随机数生成时,...

    计算机模拟仿真概述随机数与随机变量的产生

    在计算机模拟中,随机数是必不可少的元素,它们用于模拟现实世界中的不确定性。随机数生成器是专门的算法,可以产生看起来无规律的数字序列。随机变量则是这些数字在特定概率分布下的抽象表示,如均匀分布、正态分布...

    java 猜数游戏

    猜数游戏的功能要求是:计算机产生随机数,玩家输入数字,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到,给出所用时间和评语。游戏界面可以使用字符界面或图形界面实现。 游戏设计 游戏的设计原理图如...

    随机数生成器源码

    随机数生成器是计算机科学中的一个重要工具,广泛应用于各种领域,如模拟仿真、加密算法、游戏开发、统计分析等。本资源提供了一个随机数生成器的源码以及打包好的软件,用户可以根据自己的需求生成指定区间内的任意...

    C语言中产生随机数

    随机数在计算机科学中指的是不可预测的数字。然而,在实际编程中,我们通常使用的并不是真正的随机数,而是**伪随机数**。伪随机数是通过一个确定的算法产生的序列,看起来像是随机的,但实际上是可以重复的。这种...

    易语言猜随机数源码

    在这个游戏中,计算机将生成一个随机数,然后让用户尝试猜测这个数字,直到猜对为止。 首先,我们需要了解易语言中的随机数生成。在易语言中,可以使用"系统.随机数"模块来生成随机数。这个模块提供了几个函数,如...

    计算机随机数模拟随机试验教学设计.docx

    【计算机随机数模拟随机试验】是数学教学中的一个重要部分,特别是在选择性必修二的阶段,结合了条件概率、事件的独立性、随机变量、二项分布和超几何分布等概念。这一课型旨在培养学生的数学建模能力,让学生学会...

    随机数程序(用于产生一组随机数)

    C语言中生成随机数主要依赖于标准库中的`<stdlib.h>`和`<time.h>`头文件。`rand()`函数用于生成随机数,它返回一个介于0到`RAND_MAX`之间的整数。`srand()`函数用于设置随机数生成器的种子,通常我们会用当前时间`...

    生成随机数小程序

    在计算机中,由于硬件和算法的限制,真正的“随机”其实是伪随机,即通过一定的算法生成一系列看似随机但实际上可预测的数字序列。这个小程序很可能是基于某种随机数生成算法,如线性同余法、Mersenne Twister或更...

    二十中matlab随机数产生方法论文的源代码

    随机数在数值计算,随机抽样等很多领域有重要作用,尤其在密码学及信息安全领域中成为一个重要的研究方向,在数字加密,密钥获取以及身份验证等方面更是重中之重。 随机数Number分为伪随机数和真随机数,现阶段的伪随机...

    汇编语言产生随机数并运算

    在“汇编语言产生随机数并运算”这个主题中,我们将探讨如何利用汇编语言生成随机数以及如何对这些随机数进行算术运算。 随机数在各种应用程序中都有广泛的应用,比如模拟、加密、游戏、统计计算等。在汇编语言中,...

    易语言汇编取随机数

    易语言汇编取随机数的源码就是这样的一个实例,它揭示了如何在易语言环境中利用汇编语言来实现随机数生成。 首先,我们需要理解易语言的基本架构。易语言是一种中国本土开发的快速应用程序开发环境,它的设计目标是...

    数据结构_随机数

    在IT领域,尤其是在计算机科学和算法设计中,数据结构与随机数是两个至关重要的概念。数据结构是指在计算机中组织和存储数据的方式,它决定了数据的逻辑结构、物理存储以及数据的操作效率。而随机数则在模拟、统计...

    随机数生成器

    随机数生成器是一种在计算机程序中广泛使用的工具,主要用于模拟实验、统计分析、加密算法以及游戏开发等多个领域。在这个特定的案例中,我们讨论的是一个具有用户界面的伪随机数生成器,它允许用户通过输入一个4...

    CubeSix_随机数_

    在计算机科学中,虽然没有真正的“随机”(因为电脑只能执行确定性的算法),但我们可以使用伪随机数生成器(PRNG)来创建看起来随机的序列。这些生成器基于一个初始值(称为种子)产生一系列数字,看起来像是随机...

    0-100随机数生成器

    随机数在计算机科学中扮演着重要的角色,特别是在模拟、加密、游戏开发、统计分析等领域。"0-100随机数生成器"是一个使用JAVA编程语言实现的工具,它能够生成0到100之间(包括0和100)的随机整数,而且该程序设计得...

Global site tag (gtag.js) - Google Analytics