PHP random_bytes返回不可读的字符

7

我正在使用:

 random_bytes(30);

为我的程序生成一个随机字符串。然后将该字符串存储在mysql数据库中。但是,当我运行该函数时,输出的结果如下:

T�Ը�@(���m

这段文本包含了无法识别的字符。当我试图将其存储到数据库中时,这些�字符并不会被保存下来,导致该字符串不能被正确地保留。

我该如何做才能返回一个只包含可读字符的字符串,并且不会在mysql数据库中丢失?

谢谢!


1
我认为阅读一些关于UTF-8的内容可能会对你有所帮助,但是随机字节?你期望得到什么,莎士比亚的全部作品吗? - RiggsFolly
可能是PHP随机字符串生成器的重复问题。 - Jocelyn
可能是UTF-8 all the way through的重复问题。 - Jocelyn
学习一些关于字符编码的小知识会对你有所帮助,一个好的起点是ASCII和Unicode,特别是UTF-8,因为它通常用于交换。 - zaph
你尝试做的最接近的事情可能是Random::asciiPrintableString($length)。这是所有可以打印或在屏幕上看到的字符。但是,如果你想在URL中使用该随机字符串,你需要使用Random::base64UrlString($length),其中包含不需要在URL中进行编码或转义的字符。 - caw
1个回答

8

random_bytes函数会生成一个加密随机字节长度的字符串,适用于密码学用途,例如生成盐、密钥或初始化向量。使用方法如下:

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

谢谢你的帮助!我可以确认一下,当你将字符串转换为bin2hex时,它仍然是加密安全的吗? - Onglo
8
random_bytes可以生成具有密码学安全性的随机字节,而rand则不行。在PHP rand页面上有如下说明:注意:此函数不能生成具有密码学安全性的值 - zaph
2
仅仅编码随机字节并不能改变其随机性,十六进制和Base64是常见的编码方式,可以产生ASCII字符。 - zaph
4
这个示例代码会生成基于62进制的非加密伪随机字符,基本上它几乎不适用于任何目的。 - zaph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接