加入收藏 | 设为首页 | 会员中心 | 我要投稿 三明站长网 (https://www.0598zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP中的随机性——你觉得自己幸运吗?

发布时间:2016-10-01 06:36:36 所属栏目:PHP教程 来源:站长网
导读:副标题#e# 本文分析了生成用于加密的随机数的相关问题。PHP5没有提供一种简单的机制来生成密码学上强壮的随机数,但是PHP7通过引入几个CSPRNG函数来解决了这个问题。 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="492" heigh

  1. composer require paragonie/random_compat 
  2.  
  3. require 'vendor/autoload.php'; 
  4. $string = random_bytes(32); 
  5. var_dump(bin2hex($string)); 
  6. // string(64) "8757a27ce421b3b9363b7825104f8bc8cf27c4c3036573e5f0d4a91ad2aaec6f" 
  7. $int = random_int(0,255); 
  8. var_dump($int); 
  9. // int(81) 

random_compat 库和PHP7使用不同的顺序:

  1. fread() /dev/urandom if available 
  2. mcrypt_create_iv($bytes, MCRYPT_CREATE_IV) 
  3. COM('CAPICOM.Utilities.1')->GetRandom() 
  4. openssl_random_pseudo_bytes() 

想知道为什么是这个顺序建议阅读 documentation.

这个库的一个简单应用用来产生密码:

  1. $passwordChar = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
  2. $passwordLength = 8; 
  3. $max = strlen($passwordChar) - 1; 
  4. $password = ''; 
  5. for ($i = 0; $i < $passwordLength; ++$i) { 
  6.     $password .= $passwordChar[random_int(0, $max)]; 
  7. echo $password; 
  8. //possible output: 7rgG8GHu 

总结

你总是应该使用一个密码学上安全的伪随机数生成器,random_compat 库提供了一种好的实现。

如果你想要使用可靠的随机数据源,如你在本文所见,建议尽快使用 random_int 和 random_bytes.

译文链接:http://www.codeceo.com/article/php-random.html
英文原文:Randomness in PHP – Do You Feel Lucky?

 

(编辑:三明站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读