Base64 编码或 bin2hex 随机字符串
Base64 encoding or bin2hex random string
将"random bytes"转为字符串时,使用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 但这也是为了学习目的。
除了长度?并不真地。它们都是相同数据的表示。选择权在你。
但请记住:
Base64 数据可能包含字符 +
、/
和 =
,这些字符可能需要 URL 编码。
由于 Base64 数据可能包含任何字母数字字符,因此它有 轻微 的机会包含令人反感的词。 (这在技术上也适用于十六进制编码数据,但不太常见,因为它只使用字母 A 到 F。)
将"random bytes"转为字符串时,使用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 但这也是为了学习目的。
除了长度?并不真地。它们都是相同数据的表示。选择权在你。
但请记住:
Base64 数据可能包含字符
+
、/
和=
,这些字符可能需要 URL 编码。由于 Base64 数据可能包含任何字母数字字符,因此它有 轻微 的机会包含令人反感的词。 (这在技术上也适用于十六进制编码数据,但不太常见,因为它只使用字母 A 到 F。)