【发布时间】:2017-11-22 19:11:18
【问题描述】:
我正在使用这个功能https://php.net/random_bytes 我会将此随机字节转换为二进制视图。
我尝试将其转换为 hex2bin,然后我使用函数 pack 将其转换为二进制文件,但它不起作用。
如何将随机字节转换为二进制?
【问题讨论】:
-
我猜
random_bytes返回一个二进制字符串。你可以使用bin2hex()代替显示十六进制值
我正在使用这个功能https://php.net/random_bytes 我会将此随机字节转换为二进制视图。
我尝试将其转换为 hex2bin,然后我使用函数 pack 将其转换为二进制文件,但它不起作用。
如何将随机字节转换为二进制?
【问题讨论】:
random_bytes 返回一个二进制字符串。你可以使用bin2hex() 代替显示十六进制值
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...
【讨论】: