为什么echo openssl_random_pseudo_bytes(12)
没有打印出任何内容,但如果我用另一个字符串连接它确实显示输出?根据{{3}},openssl_random_pseudo_bytes
的返回类型是一个字符串,为什么会出现问题?我尝试使用(string)
键入它并且它不起作用。
答案 0 :(得分:0)
openssl_random_pseudo_bytes(...)
函数以指定长度的字符串形式(即ASCII值)返回二进制数。
例如,一个可能的输出:
$number_of_bytes = 1;
$bin = openssl_random_pseudo_bytes($number_of_bytes, $cstrong);
$hex=bin2hex($bin);
$dec=hexdec($hex);
可能是:
var_dump($bin); // string(1) "ã"
var_dump($hex); // string(2) "e3"
var_dump($dec); // int(227)
var_dump($cstrong); // bool(true)
注意:
$dec
是一个整数随机值,可以等于(最多)2 ^(8 * $ number_of_bytes) - 1。
$dec
是浮点数$bin
和$hex
值保持其精度和准确性(因为所有数字/位都保存在(可变长度)字符串中)。openssl_random_pseudo_bytes
在失败时返回false
。$cstrong!==true
表示openssl_random_pseudo_bytes
未返回加密强算法生成的结果。 (http://php.net/openssl_random_pseudo_bytes)示例函数(演示处理false
返回值或$ cstrong为false时)
class Random
{
public static function Get($number_of_bytes=4)
{
$binary_value = openssl_random_pseudo_bytes($number_of_bytes, $cstrong);
// Unable to produce a cryptographically strong value
if($binary_value==false || $cstrong!==true) return false; // failure
// other processing
$hexadecimal_value = bin2hex($binary_value);
$decimal_value = hexdec($hexadecimal_value);
// Returns a positive integer (or a float
// in the case of an integer overflow)
return $decimal_value;
}
}
手册:http://php.net/openssl_random_pseudo_bytes
用法
echo Random::Get(12); // returns a large float value most of the time