如何在PHP中解码random_bytes()的返回值

时间:2018-08-16 19:29:57

标签: php encryption

我正在使用photo_data[:, :, 0]创建一个随机数,该随机数将返回类似

的内容
random_bytes()

然后,当我��;w ���%N�:0���c1x*#�M�� 时,它会返回类似base64_decode()的内容,这是令人困惑的,因为它只是加密内容的较短版本。
如何获取实际的字符串?

4 个答案:

答案 0 :(得分:3)

您使用了错误的功能:base64_decode被用来解码一个base64编码的字符串。在这里,您的字符串不是经过base64编码的,因此使用较短的字符串是完全正常的。

要生成随机(可读)字符串,可以使用bin2hexbase64_encode

$data = random_bytes(32);
$b = base64_encode($data);
echo $b;
xROAVp/JUq4DuEGe87HYINXncOHArYzc9oeziO/TTNw= 

答案 1 :(得分:1)

在结果上使用bin2hex php函数,以便查看

bin2hex(random_bytes(number of bytes)) or 
base64_encode(bin2hex(random_bytes(number of bytes)))

答案 2 :(得分:1)

random_bytes不会返回base64编码的值,因此尝试从结果中解码一个值不会使您走得太远。

As the manual suggests,如果要生成随机的“字符串”,则需要通过类似bin2hex的方式运行它:

$bytes = random_bytes(5);
var_dump(bin2hex($bytes));
  

string(10)“ 385e33f741”

答案 3 :(得分:0)

您获得了实际的字符串,但是这些字符代码无法显示,根据字体的不同,您可能会看到不同的字符作为“普通”字符

如果您想查看一些字母,可以遵循以下算法: https://3v4l.org/FTQL5

$str = random_bytes(13);
$decoded = '';
$letterRange = (ord('a')-ord('Z'));
for($i = 0; $i < strlen($str); $i++)
{
    $decoded .= chr(ord($str[$i])%$letterRange + ord('a'));
}
echo $str.'|'.$decoded;