我有这样的代码:
$alphabet = array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
$alphabetSize = count($alphabet);
$alphabetBitSize = ceil(log($alphabetSize, 2));
$bitSize = $length * $alphabetBitSize;
$bytes = random_bytes(ceil($bitSize/8));
我需要的是读取$bitSize
循环中的位以使用字母表生成 latin1 字符串。现在我完全不知道如何用$bytes
我所拥有的来做到这一点。大多数答案都是使用字符串函数来做到这一点,但我想我需要一些二进制的东西。另一种选择可能是用十六进制来做。有什么提示吗?
我一般会使用PHP的内置函数
unpack()
将字节转换为十六进制字符串,然后再转换为二进制字符串。我希望这有帮助。要从循环中的随机字节生成字符串,可以使用按位运算从字节序列中提取必要的位。您可以尝试以下代码:
在此示例中,我使用 ord 函数从随机字节中获取字符的 ASCII 值。然后,执行按位移位和掩码以提取每一位。结果位用于索引字母表数组以形成最终字符串。
让我知道这是否适合你..
我用 bin2hex 编写了自己的代码