【问题标题】:PHP random_bytes returns unreadable charactersPHP random_bytes 返回不可读的字符
【发布时间】:2017-07-02 18:57:14
【问题描述】:

我正在使用:

 random_bytes(30);

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

T�Ը�@(���m

其中包括不可读的字符。然后,当我尝试将其存储在我的数据库中时,未存储 � 字符,因此这意味着该字符串未正确保存。

我怎样才能让它返回一个只有可读字符的字符串,不会在我的 mysql 数据库中丢失?

谢谢!

【问题讨论】:

  • 我认为一些关于 UTF-8 的阅读可能会对您有所帮助,但是随机字节???莎士比亚全集,你期待什么?
  • UTF-8 all the way through的可能重复
  • 学习一些小型的 abiuyt 字符编码对您很有帮助,一个好的起点是 ASCII 然后是 unicode,特别是 UTF-8,因为它通常用于交换。
  • 与您尝试做的最接近的可能是Random::asciiPrintableString($length)。这就是可以在屏幕上打印或看到的所有字符。但是,如果您想在 URL 中使用该随机字符串,例如,您会想要 Random::base64UrlString($length) 之类的东西,而不需要在 URL 中编码或转义的字符。

标签: php mysql


【解决方案1】:

random_bytes 生成任意长度的加密随机字节字符串,适用于加密使用,例如在生成盐、密钥或初始化向量时。像这样使用

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

【讨论】:

  • 感谢您的帮助!当你 bin2hex 时,我可以检查字符串是否仍然是加密安全的吗?
  • random_bytes 生成加密安全随机字节 rand 不会。来自PHP rand page注意:此函数不会生成加密安全值
  • 仅编码随机字节不会改变随机性,十六进制和 Base64 是常见的 ebcodings that 产生 ASCII 字符。
  • 示例代码将在 base 62 中生成非加密安全的伪随机字符,这基本上不适合几乎所有用途。
猜你喜欢
  • 2016-06-16
  • 2022-01-15
  • 2015-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多