Java 21的Pseudorandom的笔记

news/2024/10/8 9:25:27/文章来源: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 通过整合马尔可夫特性与离散随机变量来深入探索递归神经网络中的随机转换机制,旨在高效处理具有复杂潜在信息的高度结…

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、下载了最新显…

碳酸锂 短线

大周期:3分钟短线:

【LLM训练系列】从零开始训练大模型之Phi2-mini-Chinese项目解读

一、前言 本文主要是在复现和实践Phi2-mini-Chinese后,简要分析下Phi2-mini-Chinese这个项目,做一个学习实战总结。 原文发布于知乎:https://zhuanlan.zhihu.com/p/718307193,转载请注明出数。 Phi2-mini-Chinese简介 Phi2-Chinese-0.2B 从0开始训练自己的Phi2中文小模型,…

第20篇 window系统安装Redis流程

1.下载 Redis for Windows Redis 官方并没有提供 Windows 版本的安装包,但你可以使用 Microsoft 维护的 Windows 版本的 Redis。你可以从以下链接下载 Redis for Windows:2.安装 Redis 运行安装程序: 双击下载的 .msi 文件,启动安装程序。 按照安装向导的提示进行安装。这里…

C++顺序结构(1)任务

1、下载并观看视频(照着做,多看几遍) https://www.jianguoyun.com/p/DWCNkNEQi8_wDBj5ptYFIAA 2、两项照着做的任务

xlam插件制作实验手册

大家来和笔者一起做一个xlam插件吧。很简单,很详细。 楔子excel支持自定义菜单栏,但是我在搜索如何制作菜单栏,以及如何制作addin文件的时候,即使是最好的例子,也只是点到为止,做了一个按钮就结束了。想要再进一步,竟然就没有合适的二手资料了。所以自然笔者就决定自己补…

极大似然估计的思想及计算[例题]

0 前言本文主要介绍极大似然估计的意义,并举出例题帮助读者理解。1 思想极大似然估计(Maximum Likelihood Estimation, MLE)是一种在统计学中估计模型参数的方法。它的基本思想是:找到一组参数值,使得在这组参数下,观测到的数据出现的概率(即似然函数)最大。假如有一个…

大模型的两个重要能力 (IF + FC)

MiniCPM https://github.com/OpenBMB/MiniCPM 面壁智能推出的大模型,在如下方面支持能出众。 推理 长文本 RAG 都是常见的能力。 其中 指令遵从(IF=instruction follow) 和 工具调用(FC = function call), 威力强大, 可以用作很多语音控制场景。MiniCPM 3.0MiniCPM 3.0 是一…

【工具推荐】todesk最新版设备代码、连接密码读取工具,附下载链接

工具介绍: todesk最新版读取设备代码、连接密码 工具 下载链接: 链接: https://pan.quark.cn/s/237b57f42911使用说明 工具使用效果如图看着就真的看着,不学就真的5

代码整洁之道--读书笔记(6)

代码整洁之道简介: 本书是编程大师“Bob 大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更…