Java 21的Pseudorandom的笔记

news/2025/7/9 11:14:07/文章来源:https://www.cnblogs.com/jackieathome/p/18405643

Linux系统下,常见的随机数生成设备:

  • /dev/random
    随机性比较好,依赖内核的中断,当中断数量不足,获取随机数的操作会被阻塞。通过安装haveged,可以提升熵值。
    JDK的默认选项。

  • /dev/urandom
    通过熵池来产生随机数,牺牲一定的随机性,解决性能问题。
    启动Java应用时,增加如下选项,指定使用/dev/urandom作为随机数生成器。

    -Djava.security.egd=file:/dev/./urandom
    

文档

  • Java Core Libraries

  • Pseudorandom Number Generators
    PRNGs即Pseudorandom Number Generators。

  • Characteristics of PRNGs

  • Generating Pseudorandom Numbers with RandomGenerator Interface
    使用RandomGenerator来获取随机数,样例代码,如下:

    RandomGenerator random1 = RandomGenerator.of("Random");
    long value1 = random1.nextLong();
    System.out.println(value1);
    

    使用RandomGeneratorFactory来创建随机数生成器,并获取随机数,样例代码,如下:

    RandomGeneratorFactory<RandomGenerator> factory2 =RandomGeneratorFactory.of("SecureRandom");
    RandomGenerator random2 = factory2.create();
    long value2 = random2.nextLong();
    System.out.println(value2);
    

    使用Random来获取随机数,样例代码,如下:

    Random random = new Random();
    int randomNumber = random.nextInt();
    System.out.println(randomNumber);
    

    使用SecureRandom来获取随机数,样例代码,如下:

    SecureRandom r1 = new SecureRandom();
    SecureRandom r2 = SecureRandom.getInstance("NativePRNG");
    SecureRandom r3 = SecureRandom.getInstance("DRBG",DrbgParameters.instantiation(128, RESEED_ONLY, null));
    

    RandomGenerator的几个子类,如下:

    • RandomGenerator.StreamableGenerator
    • RandomGenerator.SplittableGenerator
    • RandomGenerator.LeapableGenerator
    • RandomGenerator.JumpableGenerator
    • RandomGenerator.ArbitrarilyJumpableGenerator
  • Generating Pseudorandom Numbers in Multithreaded Applications

  • Dynamically Creating New Generators

  • Creating Stream of Generators

  • Choosing a PRNG Algorithm
    通过使用RandomGenerator.isDeprecated()或者RandomGeneratorFactory.isDeprecated(),可以检查随机数生成算法是否被Java官方推荐使用。
    当前可用的随机数生成算法:

    • L64X128MixRandom
    • Xoroshiro128PlusPlus
    • L32X64StarStarRandom
    • L32X64MixRandom
    • Xoshiro256PlusPlus
    • L64X256MixRandom
    • MRG32k3a
    • L128X128MixRandom
    • L128X256MixRandom
    • L64X1024MixRandom
    • L128X1024MixRandom

    选择随机数生成器时,平衡如下因素:

    • speed,生成随机数的速度
    • space,算法运行时占用的空间
    • period,随机数的生成周期

参考资料

  • Java获取/dev/urandom的随机数
  • java dev urandom_/dev/random和/dev/urandom的一点备忘
  • /dev/urandom和/dev/random的区别
  • linux 手动安装移植 haveged,解决随机数初始化慢的问题
  • 熵值低于1000,需要启动haveged
  • haveged的代码仓库

    Additionally, since v5.6, as soon as the CRNG (the Linux cryptographic-strength random number generator) gets ready, /dev/random does not block on reads anymore.

  • haveged的官方主页
  • 在Java中,可以使用java.util.Random类来生成随机数,使用Java生成随机数的示例代码
  • 【Java代码审计】失效认证及不安全随机数篇
  • Procedual Generation in Minecraft - Structure Generation

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/794747.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

南京某大学入门知识

某大学入门知识一家之言,不必在意。 某高校文档镇楼https://github.com/SurviveSJTU/SurviveSJTUManual 地图 雷丁楼 楼主参加融媒体中心报名时,去过一次,其他时候没去过(雷丁学院,类似于与国外合作的专业) 东苑体育场 有体育馆,有室内羽毛球(二楼),击剑(二楼),健…

Python用MarkovRNN马尔可夫递归神经网络建模序列数据t-SNE可视化研究

原文链接:https://tecdat.cn/?p=37634 原文出处:拓端数据部落公众号 本文聚焦于利用马尔可夫递归神经网络(MarkovRNN)结合树库展开建模工作。MarkovRNN 通过整合马尔可夫特性与离散随机变量来深入探索递归神经网络中的随机转换机制,旨在高效处理具有复杂潜在信息的高度结…

鲜花 #2

发电 感觉自己的生活建立在空中楼阁之上。 如果感受不到好心情,那么就会被迷失感吞没。 不断告诉自己,痛苦无所谓,那么,快乐又该去何处寻觅呢? 不愿因自我而哭泣;沉湎于一时的欢愉。 基础 它滤过了一切不若以往的事物,但是,世界却被实实在在的扩大了。 选择公理诱引了无…

CUDA

1、GPU准备 1、查看GPU类型 GeForce RTX 30602、查看算力https://en.wikipedia.org/wiki/CUDA#GPUs_supported算力8.63、确定CUDA Runtime 支持的CUDA SDK为11.1-12.54、查看驱动的Driver Version CUDA Version 为12.3所以适用的CUDA 11.1-12.3 2、更新显卡驱动 1、下载了最新显…

充实的一天

今天进行了开学考试,自己发现在java语言的学习上有很大的不足,需要自己今后改进。当然也学习了新的课程,比如马克思主义原理,这个科目没有最开始想的那么枯燥

碳酸锂 短线

大周期:3分钟短线:

容器化部署目前最新版本的Elasticsearch--8.15.1

Elasticsearch 简介 Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析,采用Java语言编写。 目前,最新的版本是Elasticsearch 8.3.0,它的主要特点如下:实时搜索,实时分析分布式架构、实时文件存储,并将每一个字段都编入索引文档导…

describe、portray和depict的区别

portray和depict都表示对客观情况进行主观的、感性的描述。他们的区别很细微。 portray暗示写这句话的人认为这段描写只是作者的主观认识,不一定代表客观事实。(The novel portrays a strong female character. 小说塑造了一个坚强的女性角色。这是在说,这个女性角色坚强是作…