PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了从PHP访问CryptGenRandom大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我很难找到一种通过PHP在Windows上从Windows访问安全随机数的方法,该方法将有很大的机会进行任何给定的安装.

>许多Windows安装都没有使用openssl或禁用了它,因此openssl_random_pseudo_bytes()通常不起作用.
>当mycrypt扩展不可用时,mcrypt_create_iv()会出现同样的问题.
> session_id()(将session.entropy_length设置为一个合理的数字)是另一条路由,但是安全模式有时会禁用重新生成获取会话ID所需的功能.
>新的COM(‘CAPICOm.Utilities.1’)-> GetRandom()有点陈旧(仅Win32),并且dll无法可靠地使用.
>带有GetBytes()的新DOTNET(‘mscorlib’,’System.Security.Cryptography.RNGCryptoserviceProvider’)仅在安装.NET并与PHP兼容时才有效.

有什么更好的解决方案?

解决方法:

我实际上已经在PHP中实现了RFC4086兼容的随机生成器.您可以在the GitHub Project for PHP-CryptLib查看作品.

基本上,您可以指定所需的随机数/字符串的“强度”.如果您需要密码安全的数字,请选择“高”(但是请注意,这可能是一个阻塞操作.如果您只需要良好的强度数字/字符串,我建议您使用“中”设置.如果您只是在进行不涉及安全性的游戏) ,选择低.

所以这是使用方法

require_once dirname(dirname(__DIR__)) . '/lib/CryptLib/bootstrap.PHP';
$factory = new \CryptLib\Random\Factory;
$generator = $factory->getLowStrengthGenerator();
$number = $generator->generate(8);

这将以低强度生成一个8字节的字符串(chr 0-255)(您可以-> getHighStrengthGenerator来获得高强度).区别在于它如何设置生成器(它使用哪个混频器,以及它使用哪个源).

生成1到10(含)之间的整数:

$int = $generator->generateInt(1, 10);

请注意,RFC4086指定了一种从多个来源生成随机性的方法(这样,如果任何一个来源受到损害,最终结果将不会显着减弱).因此,当您选择“高强度”源时,它将使用与“中强度”源相同的源,但是会从“高强度”类别中添加一个或多个源.

请注意,根据RFC,输出的强度至少与所使用的最强的非破坏性源一样好.因此,这实际上将是您可以获得(设计)的应用程序的最佳质量的RNG …如果您想添加硬件TRNG,则可以并且仍然使用该机制(源是可插入的,因此它应该能够添加任何东西而不会损害输出)…

大佬总结

以上是大佬教程为你收集整理的从PHP访问CryptGenRandom全部内容,希望文章能够帮你解决从PHP访问CryptGenRandom所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: