将“随机字节”转换为字符串时,是否应使用base64_encode
或bin2hex
是否有任何区别?
$bytes = openssl_random_pseudo_bytes(32); // alternatively read from /dev/urandom
echo base64_encode($bytes); // some 44 character string
echo bin2hex($bytes); // some 64 character string
要用作bcrypt
的盐,显然修改后的base64是正确的选择,因为这是预期的。但对于帐户注册确认密钥或唯一的非顺序对象标识符这样的上下文,这是正确的选择吗?
我知道random_compat
library但这也是出于学习目的。
答案 0 :(得分:4)
除了长度?并不是的。它们都是相同数据的表示。选择取决于你。
但请记住:
Base64数据可能包含可能需要进行网址编码的字符+
,/
和=
。
由于Base64数据可能包含任何字母数字字符,因此轻微机会包含令人反感的字词。 (这在技术上也可以使用十六进制编码数据,但不太常见,因为它只使用字母A到F.)