0

我正在制作一个需要随机化内容的小型 Web 应用程序。只是它的一个小例子:返回一个 10 到 10 之间的随机数给用户。

我打算使用 Javascript 和 jQuery(计算器本身)来做。

我的问题是:我怎样才能让它的功能真正随机而不是伪随机?PHP 函数可能比 Javascript 函数更随机吗?

为了这个问题,假设我想要的是 X 和 Y 之间的真正随机数。

4

6 回答 6

6

您调用的任何函数都不会是“真正随机的”。它们都是PRNG;事实上,大多数 PRNG 都非常好,如果它们不适合您的应用程序,我会感到惊讶。此外,虽然一些 PRNG 因其小时代而臭名昭著(Random想到 Java),但我所知道的每一种现代语言——包括 JavaScript、PHP 和(及其加密包)Java——都有非常好的 PRNG。

收集“更随机”数据的最佳方法是从外部随机源获取。一种可能性是要求用户在窗口中移动鼠标一段时间,并定期收集鼠标坐标。一些军事、银行和其他高安全性系统使用热噪声传感器等硬件来获取尽可能接近随机的数据;但是,此类硬件支持不适用于 Web 应用程序。

请注意,使用系统时钟之类的技巧并不比 PRNG 好;大多数 PRNG 使用这些数据的组合来初始化它们的种子。

于 2013-06-16T13:01:11.757 回答
4

你还没有理解 Matrix 电影。;) 一个函数并不比另一种语言的函数“更随机”。所有函数都同样是伪随机的。“伪”意味着根据定义,计算机不能凭空提取随机数。它就是不能。计算机严格按照规则准确地计算。系统中的任何地方都没有随机性。尽管具有所有假定的力量,但随机性是计算机根本无法做到的一件事(即煮咖啡)。

对于真正的随机性,你需要一个外部的、自然的来源。比如测量原子衰变,或者一些不可预测且真正随机的东西。其他任何东西都只是伪随机性,其质量可能参差不齐。

好的 PRNG 会尝试在熵池中收集“外部干扰”;例如,Linux'/dev/random考虑了系统驱动程序“噪音”,它可能基于“随机”数据包撞击以太网端口或用户的鼠标移动。这到底有多随机是有争议的,但对于大多数目的来说,至少很难预测并且适当地随机。

于 2013-06-16T13:01:39.920 回答
1

我的建议是您通过加密算法加密本地时间和日期来生成二进制随机字符串。在这种情况下,尝试收集所有可能的“随机”数据源,并将它们作为输入消息和输入键加载。

正如您从之前的答案中看到的那样,您对随机数据的使用和要求很重要。如果您的应用程序很难或不可能提前猜测其值,则该数字是“随机的”。请注意,对于某些应用程序,相同的数字源可能被认为是随机的,而在其他应用程序中它们不是随机的。显然,如果您需要高质量的随机数来满足要求苛刻的应用程序,您将遇到严重的问题。

TRNG98真随机数

于 2013-06-27T00:48:58.993 回答
1

我认为没有任何方法可以完全从程序中消除随机性的确定性方面。你可以做所有你想做的事情来最小化、减轻和混淆你用来“从帽子中提取数字”的任何过程,但你永远不能真正让它完全随机。

您可以设计出一个具有足够细节的过程,使其实际上是随机的,但真正的随机可能是不可能的。

于 2013-06-16T13:01:22.267 回答
1

虽然您无法使用 php 中的代码实现真正的随机性,但您可以使用random.org API。您可以通过 php 中的 curl 或通过 javascript 中的 ajax 进行连接。据我所知,他们正在使用大气噪声作为随机种子。

于 2013-06-16T13:01:31.540 回答
1

在计算机上不可能生成真正的随机变量。但是,您可以改进标准生成器。假设你有两个基本的生成器。您创建一个表并用来自第一个生成器的值填充它。然后,如果你想得到一个数字,第二个生成一个索引并从表中返回对应的值。然后用新的值替换这个值......我忘记了这个生成器是如何被调用的......希望,它有帮助。PS对不起我的英语。

于 2013-06-16T13:10:39.720 回答