PHP 中加密安全的随机 ASCII 字符串

Luk*_*eLR 1 php security random cryptography

我知道random_bytes()在 PHP 7 中,我想用它来生成加密安全(例如难以猜测)的随机字符串,用作一次性令牌或长期存储在 cookie 中。

不幸的是,我不知道如何将 的输出转换为random_bytes()仅由人类可读字符组成的字符串,因此浏览器不会感到困惑。我知道bin2hex(),但我更喜欢使用完整的 ASCII 范围而不是十六进制数字,因为每个长度的位数更多。

有任何想法吗?

Jam*_*olk 5

不幸的是,Peter O. 在评论队列中收到负面关注后删除了他的答案,也许是因为他将其表述为一个问题。我相信这是合理的答案,所以我会重述它。

一个简单的解决方案是你的随机数据编码到的base64字母表使用base64_encode()。这不会产生您所要求的“完整 ASCII 范围”,但它会给您大部分。一个更大的 ASCII 范围由合适的 base85 编码器输出,但 php 没有内置编码器。不过,您可能会找到大量用于 php 的开源 base85 编码器。在我看来,base85 长度相对于 base64 的减少不太值得您维护额外的代码。