问题标签 [prng]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 将种子随机化会产生更多随机数吗?
关于RNG,我有三个问题。
首先是哪些数据可用作种子。我一直在利用时间,但必须有其他容易获得的种子。
c++中有哪些容易获得的种子?
如果我根据从 RNG 中出来的下一个值以随机间隔重新播种 RNG,并从问题 1 的答案中随机选择种子,这会创建一个更难预测并因此更随机的伪随机链吗?
最后,在 c++ 中获得一个范围内的随机数的最佳方法是什么?我一直在使用模数运算符,但我想要在范围内均匀分布的东西,而不是像 AI 决策那样偏向高或低。
security - 可预测的随机数生成器如何(如果有的话)在对其输出进行 SHA-1 处理后变得更安全?
这篇文章指出
尽管 Mersenne Twister 是一个非常优秀的伪随机数生成器,但由于一个非常简单的原因,它本身在密码学上并不安全。可以根据生成器在任何给定时间的状态来确定生成器的所有未来状态,并且 624 个 32 位输出或 19,937 个一位输出足以提供该状态。建议在 Mersenne Twister 的输出上使用加密安全的散列函数,例如 SHA-1,作为获取密码学中有用的密钥流的一种方法。
但是没有关于为什么消化输出会使其更安全的参考资料。老实说,我不明白为什么会这样。Mersenne Twister 的周期为 2^19937-1,但我认为我的推理也适用于任何周期性 PRNG,例如线性同余生成器。由于安全单向函数 h 的属性,可以将 h 视为单射函数(否则我们可能会产生冲突),因此只需将值从其域以一对一的方式映射到其范围。
考虑到这一点,我认为散列值将产生与原始 Mersenne Twister 完全相同的周期性行为。这意味着如果您观察一个时期的所有值并且这些值开始重现,那么您完全能够预测所有未来值。
我认为这与基于密码的加密(PKCS#5)中应用的相同原理有关 - 因为密码域没有提供足够的熵,简单地散列密码不会增加任何额外的熵 - 这就是你需要的原因在散列密码之前对密码进行加盐。我认为同样的原则也适用于此。
一个最终说服我的简单例子:假设你有一个非常糟糕的 PRNG,它总是会产生一个“随机数”1。那么即使 SHA-1 是一个完美的单向函数,将 SHA-1 应用于输出也会总是产生相同的值,从而使输出的可预测性不亚于以前。
尽管如此,我还是愿意相信那篇文章是有道理的,所以我肯定忽略了一些东西。你能帮我吗?在很大程度上,我从我的论点中遗漏了种子值——也许这就是魔法发生的地方?
security - 使用时间作为随机数生成的种子有什么(其他)问题?
我知道时间对于随机数生成来说是一个不安全的种子,因为它有效地减小了种子空间的大小。
但是说我不关心安全。例如,假设我正在为纸牌游戏进行蒙特卡洛模拟。但是,我确实关心尽可能接近真正的随机性。时间作为种子会影响我输出的随机性吗?在这种情况下,我认为 PRNG 的选择比种子更重要。
c - 使用 WELL512 获取一定范围内的随机实数
我正在使用本文中描述的 WELL512 伪随机数生成器函数。该函数返回一个随机unsigned long
值。
我如何使用这个返回值来产生一定范围内的随机实数——比如介于 340.92491 和 859812.53198 之间的浮点数。
C rand() 函数的文档似乎警告不要使用 mod。
c++ - 什么是偏置随机数生成器的可能方法?
我构建了一个单词生成器,它会选择一个长度,然后随机选择字母表中的字母来组成单词。
该程序有效,但 99% 的输出是垃圾,因为它没有观察英语的结构,我得到的带有 x 和 z 的单词和我做的 e 一样多。
我有哪些选项可以让 RNG 更频繁地使用常用字母。
我正在使用随时间播种的 stl 中的 rand() 。
linux - 一个比 /dev/random 快但在加密上有用的 RNG?
我已经开始了一些工作,其中需要一些质量随机字节,例如一次 32 个用于某些加密应用程序的初始化向量。我的问题是,这可能会同时被调用多次,我无法承受/dev/random
等待更多熵收集的块问题。
我可以用它来播种其他算法,例如/dev/urandom
可以做什么 - 但是我不相信我无法理解的东西,我没有任何现成的可用资源,我也不知道它是否在许多内核版本之间保持不变,我更喜欢某种定义明确的方法。
您是否知道您能想到的标准 PRNG 之外的任何方法,这些方法足以适用于(同时)密钥生成等?
某些密码(例如具有大种子的 RC4)是否足以生成随机输出?(我见过一个使用它的 /dev/frandom 实现,但我并不完全确定。)
如果这意味着什么,我在一个无头的 Debian 服务器上,因为缺乏熵收集。
c# - 如何生成 2 个数字之间的混洗整数列表?
我想创建一组打乱的整数,这样:
- 给定相同的种子,每次洗牌都是一样的
- 当我迭代时,洗牌集中的每个数字将在重复之前只使用一次
- 适用于大型集合(我想要 0 到 20 亿之间的所有数字)
- 将生成一个范围,例如 100 到 150。
如果您想要 0 和指定数字之间的所有数字,此选项提供了一个很好的解决方案:使用 PRNG 而不是随机播放生成随机播放范围
有任何想法吗?
javascript - JavaScript 伪随机序列生成器
我需要在给定初始种子的情况下生成一个确定的(即可重复的)伪随机数序列,并从该序列中选择第 n 个项目。
如果 JavaScript 的随机函数是可播种的,我可以这样做:
然而,事实并非如此,替代的可播种 PRNG 看起来有点慢。要求第 250 个号码会很昂贵。
我认为哈希是我在这里想要的,可能类似于md5(seed + seq) % max
但 JavaScript 没有 md5() ,如果我在代码中这样做,可能会有更好的哈希选择。
我想要一个函数
x = randomNth(seed, seq, maxVal) // x is int && x >= 0 && x < maxVal
或者,理想情况下
x = randomNth(seed, seq) // x >= 0 && x < 1, same as Math.random()
其他需求:
- 必须在 node.js 和浏览器中运行
- 数字应该在统计上是随机的(或足够接近,因为周期会很小)
- 应该是 O(1) 并且性能合理
php - 刮刮卡代码
我会尽量简单、清晰和直接。我的问题如下:我有一个项目需要为刮刮卡生成代码。刮刮卡的印刷方式与您用于为手机充电的刮刮卡相同。
该系统是人们购买卡片,获取卡片上的代码,然后调用 TOIP 服务器(Asterisk)并插入代码以访问服务。给出了三次输入正确代码的尝试。
我想制作一个 PHP 程序来生成这些代码,所以我肯定需要通过一个 PRNG(伪随机数生成器)。我的限制是:
- 正如人们所调用的那样,代码不应该太长,但要足够长以确保安全。
- 当在输入的代码和存储在数据库中的代码进行比较时(出于统计目的需要),我需要系统足够快。
所以我的问题是:
- 使用 PRNG 是否正确?
- 如果是,你知道一个足够强大的能产生好的随机数吗?
- 行业使用什么标准?
- 如果对数百万个代码进行比较,如何使比较算法足够快?
感谢您的时间和答案。
language-agnostic - 提取 PRNG 的初始种子值?
我最近读到,如果您满足以下条件,您可以预测 PRNG 的结果:
- 知道正在使用什么算法。
- 有连续的数据点。
是否可以仅从数据点中找出用于 PRNG 的种子?