Php 表单安全令牌(CSRF)-为什么在bin2hex中使用bin2hex(随机字节(32))

Php 表单安全令牌(CSRF)-为什么在bin2hex中使用bin2hex(随机字节(32)),php,forms,security,token,csrf,Php,Forms,Security,Token,Csrf,我试图在我的表单中添加一个令牌以增强安全性(即CSRF)。到目前为止,我发现(在stackoverflow和许多其他网站上)建议使用: $_SESSION['token'] = bin2hex(random_bytes(32)); 我的问题很简单,为什么不直接使用: $_SESSION['token'] = random_bytes(32); 为什么要将其转换为十六进制表示 谢谢随机字节不会轻易作为表单字段中的令牌传递。您需要一些可预测的字符集。仅仅是随机的字节流几乎肯定会破坏表单使用的任何

我试图在我的表单中添加一个令牌以增强安全性(即CSRF)。到目前为止,我发现(在stackoverflow和许多其他网站上)建议使用:

$_SESSION['token'] = bin2hex(random_bytes(32));
我的问题很简单,为什么不直接使用:

$_SESSION['token'] = random_bytes(32);
为什么要将其转换为十六进制表示


谢谢

随机字节不会轻易作为表单字段中的令牌传递。您需要一些可预测的字符集。仅仅是随机的字节流几乎肯定会破坏表单使用的任何客户端编码(utf-8、iso-8859-1、win1252、big5等)


另一方面,bin2hex编码的字符将始终是纯ASCII字符串,因此它们在客户端的任何编码中都是安全的。

随机字节不容易作为表单字段中的标记传递。您需要一些可预测的字符集。仅仅是随机的字节流几乎肯定会破坏表单使用的任何客户端编码(utf-8、iso-8859-1、win1252、big5等)


另一方面,bin2hex编码的字符将始终是纯ASCII字符串,因此它们在客户端的任何编码中都是安全的。

那么您将如何在表单/URL中打印原始字节?那么您将如何在表单/URL中打印原始字节?