可能重复:
安全随机数生成的PHP
我们需要生成一个加密的随机字符串作为认证令牌,这将在数据库中被捆绑到会话数据使用。 我们使用PHP,这似乎并不具有合适的随机数生成器内置。 我们怎样才能生成使用PHP的N长度的加密安全随机字符串?
另外请注意,由于我们的应用程序的性质,是了shell_exec假表。
可能重复:
安全随机数生成的PHP
我们需要生成一个加密的随机字符串作为认证令牌,这将在数据库中被捆绑到会话数据使用。 我们使用PHP,这似乎并不具有合适的随机数生成器内置。 我们怎样才能生成使用PHP的N长度的加密安全随机字符串?
另外请注意,由于我们的应用程序的性质,是了shell_exec假表。
怎么样uniqid
? 文档有如何可以用于饼干/会话的例子。
根据您的平台,您可以使用/ dev / urandom的或CAPICOM。 这是很好的总结了马克SEECOF此评论 :
“如果你需要对安全或加密的目的(鸡蛋,对于分组密码,密码哈希随机盐随机IV)的一些伪随机比特mt_rand()是一个贫穷的根源。在大多数Unix / Linux和/或MS-Windows平台上,你可以得到伪随机位来自操作系统或系统库,像这样的一个更好的等级:
<?php // get 128 pseudorandom bits in a string of 16 bytes $pr_bits = ''; // Unix/Linux platform? $fp = @fopen('/dev/urandom','rb'); if ($fp !== FALSE) { $pr_bits .= @fread($fp,16); @fclose($fp); } // MS-Windows platform? if (@class_exists('COM')) { // http://msdn.microsoft.com/en-us/library/aa388176(VS.85).aspx try { $CAPI_Util = new COM('CAPICOM.Utilities.1'); $pr_bits .= $CAPI_Util->GetRandom(16,0); // if we ask for binary data PHP munges it, so we // request base64 return value. We squeeze out the // redundancy and useless ==CRLF by hashing... if ($pr_bits) { $pr_bits = md5($pr_bits,TRUE); } } catch (Exception $ex) { // echo 'Exception: ' . $ex->getMessage(); } } if (strlen($pr_bits) < 16) { // do something to warn system owner that // pseudorandom generator is missing } ?>
注:它一般是安全的离开这两个尝试读取的/ dev / urandom设备,并访问您的代码CAPICOM的尝试,但每次都会在其他的平台上静默失败。 离开他们两个有那么你的代码会更加便携。”
关闭我的头顶:取微时间,由microtime中100%乘以和接收到的结果的SHA1做一些随机量。