当前位置:网站首页>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来产⽣安全的随机数。
边栏推荐
- 浮动元素与父级、兄弟盒子的关系
- 信息/数据
- 完爆面试官,一线互联网企业高级Android工程师面试题大全
- IBM大面积辞退40岁+的员工,掌握这十个搜索技巧让你的工作效率至上提高十倍
- What is the function of okcc call center
- [C language] string function and Simulation Implementation strlen & strcpy & strcat & StrCmp
- PG基础篇--逻辑结构管理(用户及权限管理)
- UWB ultra wideband positioning technology, real-time centimeter level high-precision positioning application, ultra wideband transmission technology
- 挖财钱堂教育靠谱安全吗?
- Fuzor 2020軟件安裝包下載及安裝教程
猜你喜欢
Bitcoinwin (BCW) was invited to attend Hanoi traders fair 2022
Successful entry into Baidu, 35K monthly salary, 2022 Android development interview answer
不愧是大佬,字节大牛耗时八个月又一力作
毫米波雷达人体感应器,智能感知静止存在,人体存在检测应用
How MySQL queries and modifies JSON data
Force buckle 1200 Minimum absolute difference
XaaS 陷阱:万物皆服务(可能)并不是IT真正需要的东西
使用easyexcel模板导出的两个坑(Map空数据列错乱和不支持嵌套对象)
Oracle fault handling: ora-10873:file * needs to be either taken out of backup or media recovered
如何安全快速地从 Centos迁移到openEuler
随机推荐
太牛了,看这篇足矣了
Vagrant2.2.6 supports virtualbox6.1
MySQL中字段类型为longtext的值导出后显示二进制串方式
Zhongang Mining: analysis of the current market supply situation of the global fluorite industry in 2022
The relationship between temperature measurement and imaging accuracy of ifd-x micro infrared imager (module)
That's awesome. It's enough to read this article
Fundamentals of shell programming (Chapter 9: loop)
通过POI追加数据到excel中小案例
使用 RepositoryProvider简化父子组件的传值
Thread pool parameters and reasonable settings
UWB超宽带定位技术,实时厘米级高精度定位应用,超宽带传输技术
Reflection and imagination on the notation like tool
Base du réseau neuronal de convolution d'apprentissage profond (CNN)
[hard core dry goods] which company is better in data analysis? Choose pandas or SQL
Inventory of the most complete low code / no code platforms in the whole network: Jiandao cloud, partner cloud, Mingdao cloud, Qingliu, xurong cloud, Jijian cloud, treelab, nailing · Yida, Tencent clo
How to apply smart contracts more wisely in 2022?
Using repositoryprovider to simplify the value passing of parent-child components
【C语言】字符串函数及模拟实现strlen&&strcpy&&strcat&&strcmp
Hiengine: comparable to the local cloud native memory database engine
Realizing deep learning framework from zero -- LSTM from theory to practice [practice]