精华内容
下载资源
问答
  • JAVA伪随机数

    千次阅读 2019-05-08 16:45:17
    今天要讲的是Random生成的随机数是伪随机数,为什么说Random生成的随机数是伪随机数?是因为只要两个Random对象的种子相同,而且方法的调用顺序也相同,产生的随机数相同。我们来看一下。 首先第一步:创建一个 ...
    作者:孙英鹏  撰写时间:2019年5月8日
    

    今天要讲的是Random生成的随机数是伪随机数,为什么说Random生成的随机数是伪随机数?是因为只要两个Random对象的种子相同,而且方法的调用顺序也相同,产生的随机数相同。我们来看一下。

    首先第一步:创建一个 Java 文件名为 dome(名字随便命名),创建完之后,写上代码。(看图1)

    图1:

    在这里插入图片描述

    先写上Random类,在括号里写一个数(我这里写的是16),是为16的Random对象,接下来是写打印的代码,获取上面的 r1,然后再加上.nextBoolean,括号里写上数字(我这里写的是20),nextBoolean 是返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布 的 boolean 值。

    第二步:复制,把r1的代码复制到下来。(看图1)

    结果:
    在这里插入图片描述

    得出来的结果是一样的,所以说Random生成的随机数是伪随机数。

    展开全文
  • random.nextInt(max)表示生成[0,max]之间的随机数,然后对(max-min+1)取模。 生成范围值: 方法1.以生成[10,20]随机数为例,首先生成0-20的随机数,然后对(20-10+1)取模得到[0-10]之间的随机数,然后加上min=10...

    random.nextInt(max)表示生成[0,max]之间的随机数,然后对(max-min+1)取模。

    生成范围值:

    方法1.以生成[10,20]随机数为例,首先生成0-20的随机数,然后对(20-10+1)取模得到[0-10]之间的随机数,然后加上min=10,最后生成的是10-20的随机数

    方法2.生成[1,,10]随机数,random。nextInt(9)+1

    正态分布

    double nextGaussian

    展开全文
  • 这将是Kai Michaelis,JörgSchwenk... 我们对PRNG(主要是SecureRandom)附带的常见Java生成随机序列进行了分析,发现在特殊条件下存在明显的弱点。 为了使文章尽可能简短,PRNG使用的算法的描述,详细的错误描...

    这将是Kai Michaelis,JörgSchwenk和我撰写的论文的总结,该论文在RSA Conference 2013的密码学家会议上发表 。 你可以得到我的演讲的幻灯片在这里和我们的全文在这里 。 我们对PRNG(主要是SecureRandom)附带的常见Java库生成的随机序列进行了分析,发现在特殊条件下存在明显的弱点。 为了使文章尽可能简短,PRNG使用的算法的描述,详细的错误描述和统计测试的结果均被省略,但可在本文中找到。 我们的研究涵盖PRNG本身以及用于播种的熵收集器(例如,如果没有实数生成器可用)。
    底线:当需要良好的随机性时不要使用PRNG!
    质量通过多种方式分级。 首先,我们进行了代码分析,并(成功地)尝试查找和识别导致严重缺陷的编码错误。 其次,我们对生成的随机序列进行了统计检验。 最后,我们强调了在特殊条件下(高系统负载,某些组件不可用等)的算法。

    第一个库:

    尽管经过重试,但Apache Harmony仍可作为Android源代码的一部分(请参见此处 )保留下来,因此是数百万种设备的一部分。

    弱点

    发现的错误之一直接影响Android平台。 其他错误仅存在于Apache Harmony中,而不存在于Android源代码中。
    FIRST –创建自种子的SecureRandom实例时(通过调用不带参数的构造函数并随后进行setSeed()调用),代码在插入起始值后无法调整字节偏移(状态缓冲区中的指针)。 这将导致计数器和填充的开头(32位字)覆盖部分种子而不是附加种子。 第二 –在类似Unix的操作系统下运行时,新的SecureRandom实例从urandom或随机设备中植入了20个字节的种子。 如果两者均不可访问,则该实现将提供备用种子设施。 一旦播种工具收集了请求的字节数,出于未知原因,最高有效位将设置为零。 结果,对于每个请求的字节,SecureRandom实例的有效种子仅为7/8,从而将安全性(由于第一个错误,仅64位)降低了8位至56位。 更糟糕的是,由于另一个无效的模减少,单个调用播种功能的熵被限制为仅31位。 当查看生成的字节时,熵收集器的问题显而易见。 下图描述了单个点的两个连续字节。

    每个方向上都完全缺少127以上的值。

    第二个库:

    GNU Classpath部分由著名的IcedTea项目使用,因此最著名的是Linux系统上的64位Java Browser-plugin。

    弱点

    该库在内部状态方面存在重大缺陷。 该错误与用于哈希函数的相同的初始化向量(IV)有关。 这将内部状态的未知字节数从32个减少到只有20个。EntropyCollector算法很难预测,这很好,但是它依赖于争夺CPU时间的线程,这很容易受到影响(通过将系统置于高负载)。 线程运行时检查不够严格,无法确保良好的随机性。 下图显示了有关平均分配输出的困难,留下了较大的色块。 该图显示了熵收集器在高系统负载下的性能。

    相比之下,熵收集器在正常情况下的表现与预期相同:

    第三图书馆:

    Java SE的官方免费开源实现在很大程度上与Oracle提供的版本相同。 大多数Java用户很可能依赖此代码。

    弱点

    代码审查没有明显的弱点。 Entropy Collector依赖于线程递增计数器,但是与GNU Classpath相反,它对运行时的要求最低。 结果图填充得非常平衡。

    第四图书馆:

    该库与其他库有所不同,因为它只是用于各种密码算法的非常全面的库。 它附带多种替换品 BouncyCastle的熵收集器可以在两种操作模式下运行,即快速模式和慢速模式,其中不同数量的字节用于随机输出。

    弱点

    与OpenJDK案例一样,Bouncy Castle的SecureRandom替代品(DigestRandomGenerator)没有发现明显的错误。 相反,已知VMPCRandomGenerator容易受到攻击。 两种模式下的熵收集器都可以非常平衡地填充图形。

    快速模式

    慢速模式

    摘要

    非常有趣的是受检查的实现的有限且不可配置的内部状态大小。 几乎所有实现都依赖SHA-1作为哈希(压缩)功能。 因此,它们对于大于160bit的密钥生成似乎没有用。 只有Apache Harmony依赖于512位的内部状态,但是会遭受编码错误。 该博客文章省略了许多详细信息和统计信息,以便仅对库进行快速而肮脏的审查-如果您对更多详细信息和进一步的结果感兴趣,欢迎您阅读全文。

    参考:来自Java安全和相关主题博客的JCG合作伙伴 Christopher Meyer的Java伪随机数生成器(PRNG)中的弱点

    翻译自: https://www.javacodegeeks.com/2013/03/weaknesses-in-java-pseudo-random-number-generators-prngs.html

    展开全文
  • 使用机器学习技术预测伪随机数生成器 要运行一个学习者的单个实例,请使用exampleKNN.m脚本(例如,运行KNN)。 要重新运行实验,请运行deployConfig.m。 我们总共实施了五名学习者: 随机抽样-按比例随机抽取训练...
  • Java安全伪随机数生成器 此目录包含为Apigee Edge编译简单的Java标注所需的Java源代码和pom.xml文件。 标注使用java.security.SecureRandom在策略Apigee Edge代理内生成随机数(int,UUID或高斯值),并使用该信息...
  • =N随机一个R,区间在[0,N-K)如果R在[0,M-K)中,则中奖,K++.完毕.---- ----最近在写互动代码,里面用到了概率发奖,在网上简单搜索了一下没看到Java版本,估计太简单了。没人稀罕写,也或许又开源的方案,我没找到...

    update:

    用概率算法解决的思路,没有任何数量限制:

    总数N,预计中奖数M,已中奖数K。0<=K<=M<=N

    随机一个数R,区间在[0,N-K)

    如果R在[0,M-K)中,则中奖,K++.

    完毕.

    ---- ----

    最近在写互动代码,里面用到了概率发奖,在网上简单搜索了一下没看到Java版本,估计太简单了。没人稀罕写,也或许又开源的方案,我没找到。

    顺手把我写的发出来记录一下。这个是比较简单的版本100%,1000%的方案。记得5年前写过一个几百万人+的抽奖方案。用的是概率解法,记录中奖人数,然后用数学的方法,越往后中奖概率越高。

    先发这个简单版本吧:

    /**

    * 伪随机数,构造从0~max的伪随机数生成器.用完了可以自动填充.

    * 一般在上层业务中放到static里面.

    * 不同业务建议用一个static Map去管理.

    * 此处放Set,不同场景可以使用ConcrrentHashMap将对应的概率值里面放对应的业务Object.

    */

    public class PseudoRandom {

    private CopyOnWriteArraySet copyOnWriteArraySet;

    private int max;

    private Random random;

    public PseudoRandom(int max){

    copyOnWriteArraySet = new CopyOnWriteArraySet();

    this.max = max;

    refill(this.max);

    }

    /**

    * 重新生成所有随机数

    * @param max

    */

    protected void refill(int max){

    random = new Random(System.currentTimeMillis());

    for(int i = 0; i < max; i++){

    copyOnWriteArraySet.add(i);

    }

    }

    /**

    * 得到下一个随机数.

    * 这个方法不用同步,因为如果在第一个线程里用完,另一个线程在初始化中,第一个线程拿到了数据,也没有关系,能保证全概率出现一遍,不会多不会少.

    * 但如果是不同业务,要在上层去保证不同业务拿到不同的实例instance,如果所有业务共用这一个,业务可能会有概率不全的情况.

    * @return

    */

    public int next(){

    int nextInt = -1;

    do {

    int nextTryInt = random.nextInt(max);

    if(copyOnWriteArraySet.remove(nextTryInt)) {

    //如果移除成功,则返回

    nextInt = nextTryInt;

    }else {

    //判断是否已经全部出现

    if (copyOnWriteArraySet.isEmpty()) {

    //如果一次全概率都出现了,重新填充

    refill(max);

    }

    }

    }while(nextInt == -1);

    return nextInt;

    }

    public static void main(String[] args){

    PseudoRandom p = new PseudoRandom(10);

    for(int i = 0; i<20;i++){

    System.out.println(p.next());

    }

    }

    }

    展开全文
  • java伪随机数生成的两种方式

    千次阅读 2014-06-29 10:21:20
    生成伪随机数: 一、
  • 伪随机数算法

    2021-02-12 22:51:30
    计算机中的随机数都是由程序算法,也就是某些公式函数生成的,只不过对于同一随机种子与函数,得到的随机数列是一定的,因此得到的随机数可预测且有周期,不能算是真正的随机数,因此称为伪随机数(Pseudo Random ...
  • java怎么进行随机数生成算法要产生随机数,可以使用Java api中java.lang包中的Math类.Math类以静态方法的方式提供常用的数学方法, 其中Math.random()方法是一个可以产生[0.0,1.0]区间内的一个双精度浮点数的方法 如...
  • 解决方案 Java's Math.random() is documented to return numbers that "are chosen pseudorandomly with (approximately) uniform distribution from" the interval [0, 1). However, although that documentation...
  • 伪随机数(示例代码)

    2021-04-12 17:26:51
    Randomrandom伪随机数类在 java.util 包下,是最常用的随机数生成器,其使用线性同余公式来生成随机数,所以才说是伪随机。该类的实例是线程安全的,多线程并发使用可能会遇到争用问题,这时可用 Thre...
  • Java Random seed伪随机

    2021-02-26 08:34:02
    方法:/*** 在指定区间[min,max)通过种子seed设置伪随机数* @param min 最小值* @param max 最大值* @param seed 种子*/public static int random(int min, int max, long seed) {Random random = new Random(seed);...
  • python-伪随机数生成

    2021-11-30 21:07:35
    python-伪随机数生成器 先介绍一下随机数和随机数生成器: 随机数源于现实生活–使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等。 产生这些随机数的方法有很多种,而这些产生随机数...
  • Random类——生成伪随机数

    千次阅读 2018-04-02 23:52:36
    Java Random介绍一、简介Random类位于java.util包下,此类的实例用于生成伪随机数流。之所以称之为伪随机,是因为真正意义上的随机数(或者称为随机事件)在某次产生过程中是按照实验过程表现的分布概率随机产生的,...
  • 但是这些方法产生的随机数质量往往不是很高,而今天介绍的梅森旋转算法可以产生高质量的伪随机数,并且效率高效,弥补了传统伪随机数生成器的不足。梅森旋转算法的最长周期取自一个梅森素数,由此命名为梅森旋转算法...
  • CTF之java伪随机数random函数破解 预测

    千次阅读 2020-10-25 17:02:38
    某个后台访问之后,首先映入眼帘的只有一个登录框 抓包如下: ...因为有源码,看看源码怎么说: 大概意思就是当cookie_token不等于空...2、搞定这个伪随机 在师傅疯狂暗示下,我放弃了暴力美学,走上了第二条路,有大佬
  • 创建这个随机器的时候,如果我们在小括号中传入了一个整数值,那么他后面随机出来的都是固定的,这是因为我们传入的这个叫做seek(种子),如果我们没有传入,会以当前时间的时间戳作为种子。 3.使用Random int ...
  • 解密随机数生成器(二)——从java源码看线性同余算法 Random Java中的Random类生成的是伪随机数,使用的是48-bit的种子,然后调用一个linear congruential formula线性同余方程(Donald Knuth的编程艺术 ......
  • java生成不重复随机的数字

    千次阅读 2021-03-06 15:58:30
    Java中产生随机数1 . 调用java.lang下面Math类中的random()方法产生随机数新建一个文件后缀名为java的文件,文件名取为MyRandom,该类中编写如下的代码:public class MyRandom {public static void main(String[] ...
  • java-Random类(伪随机数)学习

    千次阅读 2019-07-05 11:25:56
    查看jdk文档可以看到,Random生成的是伪随机数。 什么是伪随机数呢?java是通过一个“种子”,然后经过算法计算产生的随机数。如果种子相同,则产生的随机数序列也就相同,这不是我们所想的真正的随机数。 大...
  • To ensure that your test actually tests what you think it does, it isimportant that the checksums themselves not be guessable by thecompiler. It would be a bad idea to use consecutive integers as your...
  • 在软件开发编程中,我们经常需要生成一个随机数值。比如在1~100的整型范围内生成一个...幸运的是,由于在Java API中提供了生成随机数的类,可以通过java.util.Random类、Math.random工具方法和ThreadLocalRand
  • 使用python实现伪随机数生成

    千次阅读 2018-10-22 22:51:05
    在前两天学习了使用python实现伪随机数的方法,今天是时候来做一个总结了。 首先要说明的是什么是随机数,真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等。产生这些...
  • import java.util.Random;/*** MT19937的Java实现*/public class MTRandom extends Random {// Constants used in the original C implementationprivate final static int UPPER_MASK = 0x80000000;private final ...
  • Java Random伪随机数

    2021-11-28 16:18:54
    public static void main(String[] args) { Random r1 = new Random(1);...// 随机种子 for (int i = 0; i < 100; i++) { System.out.println(r1.nextInt(10));// 取值范围[0,10)即0-9 System.out..
  • 真随机数和伪随机数

    千次阅读 2019-03-15 17:34:37
    随机数的特性 ...真随机数和伪随机数 真随机数  真随机数是伴随着物理实验的,比如:抛硬币、掷骰子、电子元件的噪音、核裂变等,它的结果符合三大特性的。  具体实现:intel通过电阻和振荡器生成...
  • 什么是伪随机数? 1.伪随机数是看似随机实质是固定的周期性序列,也就是有规则的随机。 2.只要这个随机数是由确定算法生成的,那就是伪随机,只能通过不断算法优化,使你的随机数更接近随机。 (随机这个属性和算法...
  • 伪随机数是看似随机实质是固定的周期性序列,也就是有规则的随机。什么是随机数随机数在计算机应用中使用的比较广泛,最为熟知的便是在密码学中的应用。随机数有3个特性,具体如下:随机性:不存在统计学偏差,是...
  • java随机生成三位

    千次阅读 2020-09-28 16:40:28
    * 生成随机三位 */ public static void test3(){ int i=(int)(Math.random()*900)+100; int j= new Random().nextInt(900)+100; System.out.println(i); } 也就是要bai求100到999之间的随机数, Math....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,790
精华内容 9,116
关键字:

java生成伪随机数

java 订阅