问题标签 [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.

0 投票
2 回答
1513 浏览

perl - 我需要一个便携的、一致的伪随机数生成器

我正在编写一个小姐妹加密功能,我需要一个 PRNG,它可以在整个操作系统中产生一致的结果(所以没有浮点数学,利用硬件或系统级软件)。这会很好,但不是必需的,因为 PRNG 的周期长于 2 30

我目前正在使用 32 位Xorshift

但我很担心,因为我真的不明白它是如何工作的。例如,原始来源没有设置种子的能力,所以我添加了一个,但我不知道我是否为种子选择了正确的变量。

所以,所有这一切都归结为

  1. 你知道 CPAN 上有一个适合我需要的模块吗?
  2. 如果没有,您知道适合我需要的算法吗?
0 投票
6 回答
5659 浏览

math - c=2^N +-1 快速计算 (a*b) mod c

在 32 位整数数学中,加法和乘法的基本数学运算是隐式计算的,模 2^32,这意味着您的结果将是加法或乘法的最低位。

如果你想用不同的模数计算结果,你当然可以使用不同语言的任意数量的 BigInt 类。对于 a,b,c < 2^32 的值,您可以计算 64 位长整数的中间值,并使用内置的 % 运算符来减少到正确的答案

但是有人告诉我,当 C 的形式为 (2^N)-1 或 (2^N)+1,不使用 64 位数学或一个 BigInt 库,并且非常有效,比任意模计算更有效,并且还可以正确计算如果包含中间乘法,通常会溢出 32 位 int 的情况。

不幸的是,尽管听说这种特殊情况有快速评估方法,但我实际上并没有找到该方法的描述。“那不是在 Knuth 吗?” “这不是维基百科的某个地方吗?” 是我听到的喃喃自语。

这显然是随机数生成器中的一种常用技术,因为 2147483647 是一个等于 2^31 -1 的素数,所以它对 a*b mod 2147483647 进行乘法运算。

所以我会问专家。这个我找不到任何讨论的聪明的特殊情况乘法与mod方法是什么?

0 投票
4 回答
615 浏览

random - 是否存在用于根据用户输入构建熵池的软件?

出于某些目的,能够绕过任何类型的算法生成的随机数以支持自然输入(例如掷骰子)会很好。例如,加密密钥生成让我觉得需要足够少的随机数据,并且数据真正随机的要求足够高,这可能是一个可行且理想的事情。

所以在我动手之前我想知道的是:是否有任何软件可以直接从随机数字输入构建熵池?请注意,仅仅将事物从基数 r 转换为基数 2 是不够的;例如,因为 3 和 2 是相对素数,所以将基数 3(或基数 6)数字转换为二进制数字同时保持原始输入中的最大熵并不完全简单。

0 投票
9 回答
22311 浏览

random - CUDA 中的随机数生成器

我整天都在为此苦苦挣扎,我试图在我的 CUDA 代码中为线程获取一个随机数生成器。我浏览了所有论坛,是的,这个话题出现了很多,但我花了几个小时试图解开各种代码,但无济于事。如果有人知道一个简单的方法,可能是一个可以调用的设备内核返回一个介于 0 和 1 之间的随机浮点数,或者一个我可以转换的整数,我将不胜感激。

同样,我希望在内核中使用随机数,就像 rand() 一样。

提前致谢

0 投票
5 回答
1804 浏览

c++ - A*X MOD (2^N)-1 的倒数

给定一个函数 y = f(A,X):

对于'x'的所有值,我如何找到反函数 x = g(A,y) 使得 x = g(A, f(A,x))?

如果 f() 对于 'x' 的所有值都不可逆,那么最接近倒数的是什么?

(F 是一个过时的 PRNG,我试图了解如何反转这样的功能)。

  • 更新
    如果 A 与 (2^N)-1 互质,则 g(A,Y) 就是 f(A-1, y)。
    如果 A 不是相对素数,则 y 的范围受到限制……如果限制在该范围内,g(·) 是否仍然存在?
0 投票
4 回答
2363 浏览

c++ - 多次播种伪随机数生成器的问题?

我已经看到很多建议不要在每次执行时多次播种伪随机数生成器,但从未附有详尽的解释。当然,很容易看出为什么以下 (C/C++) 示例不是一个好主意:

get_rand因为每秒调用几次会产生重复的结果。

但是下面的例子难道不是一个可以接受的解决方案吗?

MyRand.h

我的兰德.cpp

主文件

即,即使MyRand:s 构造函数被快速连续调用多次,每次调用srand都有不同的参数。显然,这不是线程安全的,但同样也不是rand.

0 投票
5 回答
2539 浏览

c - c / Unix中的多个随机数生成器状态

我在 Unix 系统上使用 srandom() 和 random() 在 c 中生成随机数。我想要多个RNG。每个给定相同的种子,都应该输出相同的序列。我还想保存和恢复每个的状态。这是一个伪代码示例:

我该怎么做呢?有时 RNG 会分叉到不同的线程中,我也需要在创建新线程时复制 RNG 的状态。

0 投票
2 回答
2595 浏览

security - 使用 Fortuna PRNG 在计数器模式下使用 AES 进行随机访问加密:

我正在构建基于 AES 的文件加密,它必须能够在随机访问模式下工作(访问文件的任何部分)。例如,可以在 Counter 中使用 AES,但众所周知,我们需要一个从未使用过两次的唯一序列。在这种情况下是否可以使用简化的 Fortuna PRNG(使用特定于特定文件的随机选择的唯一密钥加密计数器)?这种方法有弱点吗?

所以加密/解密看起来像这样

在偏移量处加密块:

在 Offset 处解密块:

一项观察。我自己想到了 Fortuna 中使用的想法,后来肯定发现它已经被发明了。但正如我所读到的,关于它的关键点是安全性,但还有另一个好处:可以说它是一个很棒的随机访问伪随机数生成器(以简化形式)。因此,PRNG 不仅可以产生非常好的序列(我用 Ent 和 Die Hard 对其进行了测试),而且如果您知道步骤编号,还允许访问任何子序列。那么在安全应用程序中使用 Fortuna 作为“随机访问”PRNG 通常可以吗?

编辑:

换句话说,我建议使用 Fortuna PRNG 作为调整,以形成具有随机访问能力的可调整 AES 密码。我阅读了 Liskov、Rivest 和 Wagner 的作品,但无法理解操作模式中的密码和可调整密码之间的主要区别是什么。他们说他们建议将这种方法从密码本身的高层引入,但例如在我的情况下,通过调整对纯文本进行异或,这是否是调整?

0 投票
4 回答
553 浏览

integer - 伪随机序列发生器不仅仅是一个数字发生器

我需要一种算法,它几乎可以将 unix 时间戳转换为适当的随机数,这样如果我“回放”时间戳,我就会得到相同的随机数。

这就是我所说的适当的意思:

  1. 大多数人不会在随机数中检测到循环或模式。
  2. 它不需要是密码安全的。
  3. 所有数字都必须能够生成。(我发现 LFSR 不这样做)
  4. 数字是 32 位整数

我希望它相当快。

到目前为止,我的想法是一遍又一遍地播种 PRNG,但我不确定这是否是处理这个问题的最佳方法。

任何想法和想法将不胜感激。

谢谢。

0 投票
2 回答
629 浏览

c# - 寻找可以使用任意数量字节播种的 PRNG

我正在寻找您最初使用任意字节数组播种的 PRNG(伪随机性)。

听说过吗?