草庐IT

php - 将 rand() 替换为 openssl_random_pseudo_bytes()

我需要替换PHP的rand()函数,该函数使用加密强度高的随机数生成器。openssl_random_pseudo_bytes()函数可让您访问强随机数生成器,但它会将其数据输出为字节字符串。相反,我需要一个介于0和X之间的整数。我认为关键是将openssl_random_pseudo_bytes()的输出转换为整数,然后您可以根据需要对其进行任何数学运算。我可以想到一些从字节字符串转换为整数的“强力”方法,但我希望得到一些……优雅的东西。 最佳答案 根据提供的建议,我使用OpenSSL创建了rand()的替代品。我会把它包括在这里

PHP rand() 与 random_int()

作为php.netindicates:random_int()函数生成加密安全的伪随机整数。但是,有人可以解释一下rand()和random_int()之间的区别吗?当只需要一个随机整数时,我可以使用random_int()而不是rand()吗?哪个更快? 最佳答案 重新审视这个问题并看到已经给出了答案,我发现我将我的评论提交给答案是公平的,因为他们之前已经提交过。PHP7的random_int()函数手册指出:"Returnsacryptographicallysecurerandomintegerintherangemintom

php - mt_rand() 和 rand() 的区别

使用mt_rand($min,$max)和rand($min,$max)关于速度有什么区别? 最佳答案 更新从PHP7.1开始,mt_rand完全取代了rand,rand成为了mt_rand的别名。下面的回答主要针对旧版本这两个函数的区别,以及引入mt_rand的原因。速度并不是引入mt_rand的原因!rand函数早在mt_rand之前就已存在,但它存在严重缺陷。PRNG必须获得一些熵,它从中生成一系列随机数。如果您打印出由rand()生成的十个数字的列表,如下所示:for($i=0;$i输出可用于计算出rand种子是什么,您可以

C++ std::mt19937 和 rng 状态保存/加载和可移植性

我希望能够保存和加载RNG的状态,这样我就可以从给定点(应用程序保存/快照)再现相同的随机值。我看到有一个运算符>重载,它似乎以数字序列的形式保存到字符串中。这是最好/唯一的保存方式吗?我不介意只使用固定大小的二进制状态值而不是这个空格分隔的字符串,然后我需要为我的文件格式添加前缀或放置分隔符。这是便携的吗?例如我可以在不同的编译器版本之间传输,甚至在MSVC和GCC之间传输,以在给定相同配置的分布的情况下生成相同的数据集(浮点情况下的误差很小,整数数学精确)? 最佳答案 是的,operator和operator>>是导入或导出随机

c++ - random_shuffle 线程安全吗?如果不是,则使用 rand_r

std::random_shuffle线程安全吗?我认为不是,因为常规的rand()不是线程安全的。如果是这种情况,我将如何将rand_r与random_shuffle一起使用,以便我可以给每个线程一个唯一的种子。我已经看到了使用带有random_shuffle的自定义随机生成器的示例,但我仍然不清楚。谢谢。 最佳答案 要将rand_r与std::random_shuffle一起使用,您需要编写一个(相当简单的)包装器。您传递给random_shuffle的随机数生成器需要接受一个参数,该参数指定要生成的数字范围,而rand_r没有

C++ 超快速线程安全 rand 函数

voidNetClass::Modulate(vector&synapses){intsize=synapses.size();intsplit=200*0.5;for(intw=0;w函数rand_r(seedp)严重阻碍了我的程序。具体来说,串行运行时它会减慢我3倍的速度,而在16核上运行时会减慢4.4倍。rand()不是一个选项,因为它更糟。我能做些什么来简化这个吗?如果它会有所作为,我认为我可以在统计随机性方面蒙受损失。预生成(在执行之前)随机数列表然后加载到线程堆栈是一种选择吗? 最佳答案 问题是seedp变量(及其内存位

c++ - std::uniform_real_distribution 和 rand()

为什么std::uniform_real_distribution比rand()作为随机数生成器更好?有人可以举个例子吗? 最佳答案 首先,应该明确提出的比较是荒谬的。uniform_real_distribution不是随机数生成器。您不能从uniform_real_distribution生成随机数没有将随机数生成器传递给它的operator().uniform_real_distribution将该随机数生成器的输出“整形”为均匀的实数分布。您可以将各种随机数生成器插入到一个发行版中。我不认为这是一个合适的比较,所以我将比较u

c++ - 我应该使用 rand() 还是 rand_r()?

我正在尝试在C++中获取一个随机数,并且我正在使用rand()。这就是cpplint说:Considerusingrand_r(...)insteadofrand(...)forimprovedthreadsafety.我正在切换到rand_r这就是cppcheck说:Obsoletefunction'rand_r'called.Itisrecommendedtousethefunction'rand'instead.谁是对的? 最佳答案 两者都有。rand()函数由C标准定义,自1989/1990年第一个此类标准以来一直如此;它通

c++ - 我应该使用 std::default_random_engine 还是应该使用 std::mt19937?

当我想使用std::random生成随机数时,我应该更喜欢哪个引擎?std::default_random_engine还是std::mt19937?有什么区别? 最佳答案 对于轻量级随机数(例如游戏),您当然可以考虑default_random_engine.但是,如果您的代码严重依赖于随机性的质量(例如模拟软件),则不应使用它,因为它只提供极简保证:Itisthelibraryimplemention'sselectionofageneratorthatprovidesatleastacceptableenginebehavio

c++ -/usr/bin/ld : cannot find -lboost_system-mt

我最近从boost1.40升级到了1.45,完全删除了以前的boost目录,下载了1.45的源代码并重建了我想要的库。然后我使用bjaminstall安装了这些库。我的机器上没有其他任何变化,但是,现在当我构建我的C++程序时,我收到以下链接错误:/usr/bin/ld:cannotfind-lboost_system-mt我搜索了,该文件确实不存在。似乎mt库不再是库的一部分-还是我遗漏了什么?我该如何解决这个问题? 最佳答案 好吧,我在ubuntu12.04(x86_64)上通过良好的scattergun方法解决了这个错误mak