首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中安全地生成某个范围内的随机数

在Java中安全地生成某个范围内的随机数
EN

Stack Overflow用户
提问于 2018-06-02 00:07:22
回答 1查看 846关注 0票数 -4

如何安全地生成特定范围内的随机整数值?

我知道很多人以前问过这个问题,例如this post,但是这个方法似乎并不安全。让我解释一下:

'Math‘库有Math.random(),它生成[0,1]范围内的随机值。使用它,人们可以构造一个算法,比如

代码语言:javascript
复制
int randomInteger = Math.floor(Math.random() * (Integer.MAX_VALUE - Integer.MIN_VALUE + 1) + Integer.MIN_VALUE)

Integer.MAX_VALUEInteger.MIN_VALUE之间生成一个随机数。但是,Integer.MAX_VALUE - Integer.MIN_VALUE将溢出。

我们的目标不仅仅是生成随机数,而是均匀地生成它们,这意味着1出现的概率与Integer.MAX_VALUE相同。我知道有一些解决办法,比如将大值转换为long,但问题仍然是如何从Long.MIN_VALUE生成一个长整型值到Long.MAX_VALUE

我也不确定其他预先编写的算法,因为它们也可能溢出并导致概率分布发生变化。所以我的问题是,是否有一个数学方程只使用整数(不会转换为long anywhere)和Math.random()来生成从Integer.MIN_VALUEInteger.MAX_VALUE的随机数。或者是否有人知道任何不会在内部溢出的随机生成器?

EN

回答 1

Stack Overflow用户

发布于 2018-06-02 03:02:25

更好的方法可能是使用java.security.SecureRandom,它是一种加密功能很强的随机数生成器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50647343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档