当前位置:网站首页>SecureRandom那些事|真伪随机数
SecureRandom那些事|真伪随机数
2022-07-05 19:46:00 【步尔斯特】
前面的几篇文章,介绍了随机数的几种生成方式,那么什么是伪随机数呢?
所谓伪随机数,是指只要给定⼀个初始的种⼦,产⽣的随机数序列是完全⼀样的。
for (int i = 0; i < 10; i++) {
Random random = new Random(123);
int randomValue = random.nextInt(10);
System.out.println(randomValue);
}
当我们初始化Random不给定种子的时候,会默认给定当前的时间作为种子。
/** * Creates a new random number generator. This constructor sets * the seed of the random number generator to a value very likely * to be distinct from any other invocation of this constructor. */
public Random() {
this(seedUniquifier() ^ System.nanoTime());
}
跟踪
* @return the current value of the running Java Virtual Machine's
* high-resolution time source, in nanoseconds
* @since 1.5
*/
public static native long nanoTime();
那么,什么是真随机数呢?
真正的真随机数只能通过量⼦⼒学原理来获取,⽽我们想要的是⼀个不可预测的安全的随机
数,SecureRandom就是⽤来创建安全的随机数的:
SecureRandom sr = new SecureRandom();
System.out.println(sr.nextInt(100));
SecureRandom⽆法指定种⼦,它使⽤RNG(random number generator)算法。JDK的SecureRandom实际上有多种不同的底层实现,有的使⽤安全随机种⼦加上伪随机数算法来产⽣安全的随机数,有的使⽤真正的随机数⽣成器。
实际使⽤的时候,可以优先获取⾼强度的安全随机数⽣成器,如果没有提供,再使⽤普通等级的安全随机数⽣成器:
import java.util.Arrays;
import java.security.SecureRandom;
import java.security.NoSuchAlgorithmException;
public class Main {
public static void main(String[] args) {
SecureRandom sr = null;
try {
// 获取⾼强度安全随机数⽣成器
sr = SecureRandom.getInstanceStrong();
} catch (NoSuchAlgorithmException e) {
// 获取普通的安全随机数⽣成器
sr = new SecureRandom();
}
}
SecureRandom的安全性是通过操作系统提供的安全的随机种⼦来⽣成随机数。
这个种⼦是通过CPU的热噪声、读写磁盘的字节、⽹络流量等各种随机事件产⽣的“熵”。
在密码学中,安全的随机数⾮常重要。如果使⽤不安全的伪随机数,所有加密体系都将被攻破。
因此,时刻牢记必须使⽤SecureRandom来产⽣安全的随机数。
边栏推荐
- Realizing deep learning framework from zero -- LSTM from theory to practice [practice]
- Vagrant2.2.6 supports virtualbox6.1
- 从零实现深度学习框架——LSTM从理论到实战【实战】
- The binary string mode is displayed after the value with the field type of longtext in MySQL is exported
- 函数的概念及语法
- Analysis of openh264 decoded data flow
- webuploader文件上传 拖拽上传 进度监听 类型控制 上传结果监听控件
- acm入门day1
- Gstreamer中的task
- 力扣 1200. 最小绝对差
猜你喜欢
ACM getting started Day1
建立自己的网站(16)
Fuzor 2020軟件安裝包下載及安裝教程
How to apply smart contracts more wisely in 2022?
测试的核心价值到底是什么?
Android interview, Android audio and video development
Microwave radar induction module technology, real-time intelligent detection of human existence, static micro motion and static perception
S7-200smart uses V90 Modbus communication control library to control the specific methods and steps of V90 servo
建议收藏,我的腾讯Android面试经历分享
深度學習 卷積神經網絡(CNN)基礎
随机推荐
Fundamentals of deep learning convolutional neural network (CNN)
[Collection - industry solutions] how to build a high-performance data acceleration and data editing platform
Bitcoinwin (BCW)受邀参加Hanoi Traders Fair 2022
Win10 x64环境下基于VS2017和cmake-gui配置使用zxing以及opencv,并实现data metrix码的简单检测
PG基础篇--逻辑结构管理(用户及权限管理)
Realizing deep learning framework from zero -- LSTM from theory to practice [practice]
建议收藏,我的腾讯Android面试经历分享
aggregate
40000 word Wenshuo operator new & operator delete
Information / data
毫米波雷达人体感应器,智能感知静止存在,人体存在检测应用
Necessary skills for interview in large factories, 2022android will not die, I will not fall
JAD installation, configuration and integration idea
C#应用程序界面开发基础——窗体控制(5)——分组类控件
国海证券在网上开户安全吗?
Bitcoinwin (BCW) was invited to attend Hanoi traders fair 2022
How to realize the Online timer and offline timer in the game
UWB超宽带定位技术,实时厘米级高精度定位应用,超宽带传输技术
Concept and syntax of function
Apprentissage du projet MMO I: préchauffage