2017-06-20 207 views

回答

1

random_bytes返回二进制数据,但不是可读的格式。如果你想真正代表它为1和0的字符串,你需要首先使用PHP的bin2*功能之一转换,然后用base_convert将其转换回:

<?php 
function random_binary($bytes) { 
    return base_convert(bin2hex(random_bytes($bytes)), 16, 2); 
} 

echo random_binary(1); 

// 10000011 

这将只工作了到系统的整数限制(在64位系统上可能为2^63-1)。如果你有安装了GMP扩展,可以使用任意精度如下:

<?php 
function random_binary($bytes) { 
    $hex = bin2hex(random_bytes($bytes)); 
    return gmp_strval(gmp_init($hex, 16), 2); 
} 

echo random_binary(40); 

// 10000000101110000010011111001011011100111110... 
+0

为什么有时候二进制文件只有0? 字符串(40)“e1b813b168a91d6bffd1022c7c998e7ace328240” 串(64)“0000000000000000000000000000000000000000000000000000000000000000” –

+0

这是由于浮点精度,在base_convert的文档的警告:http://php.net/base_convert – hakre

+0

base_convert只会工作到您的系统的整数限制,很可能只有8字节(2^63 - 1)。我已经添加了另一种解决方案,但它依赖于GMP扩展。 – iainn

相关问题