PHP 和 Sodium - 无法以表格形式公开传递随机数
PHP and Sodium - Unable to pass a nonce publicly in a form
如标题所示,我很难通过表单公开传递随机数的值。我尝试在表单中使用隐藏字段并将值作为参数传递给 url.
随机数是使用以下方法创建的:
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES)
当我尝试使用从隐藏字段 (POST) 或 url (GET) 中检索到的值(例如 sodium_crypto_secretbox_open)时,返回以下错误:
Uncaught SodiumException: nonce size should be SODIUM_CRYPTO_SECRETBOX_NONCEBYTES bytes
我知道 nonce 字符串的大小受到了影响,但我不知道如何解决这个问题。
当我回显检索到的随机数时,它看起来很好。在随机数被回显后似乎出现了一个问题,它改变了大小并且被认为不适合被钠使用。
如有任何建议,我们将不胜感激。
二进制值在请求中发送时不能很好地转换,因此您可能会考虑使用 bin2hex
转换原始随机数值,添加为隐藏输入,然后使用反向过程进行处理hex2bin
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$hex=bin2hex($nonce);
/* add the above $hex as the hidden input */
/* serverside decode the input*/
$bin=hex2bin($hex);
<form method='post'>
<input type='hidden' name='nonce' value='<?php echo $hex;?>' />
<!-- other elements -->
<input type='submit' />
</form>
/* serverside */
$bin=hex2bin( $_POST['nonce'] );
更新:
进一步阅读这些原生钠法 sodium_hex2bin
和 sodium_bin2hex
Like sodium_bin2hex()
, sodium_hex2bin()
is resistant to side-channel attacks
while hex2bin() is not.
使用 SODIUM_CRYPTO_BOX_NONCEBYTES 而不是 SODIUM_CRYPTO_SECRETBOX_NONCEBYTES。
如标题所示,我很难通过表单公开传递随机数的值。我尝试在表单中使用隐藏字段并将值作为参数传递给 url.
随机数是使用以下方法创建的:
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES)
当我尝试使用从隐藏字段 (POST) 或 url (GET) 中检索到的值(例如 sodium_crypto_secretbox_open)时,返回以下错误:
Uncaught SodiumException: nonce size should be SODIUM_CRYPTO_SECRETBOX_NONCEBYTES bytes
我知道 nonce 字符串的大小受到了影响,但我不知道如何解决这个问题。
当我回显检索到的随机数时,它看起来很好。在随机数被回显后似乎出现了一个问题,它改变了大小并且被认为不适合被钠使用。
如有任何建议,我们将不胜感激。
二进制值在请求中发送时不能很好地转换,因此您可能会考虑使用 bin2hex
转换原始随机数值,添加为隐藏输入,然后使用反向过程进行处理hex2bin
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$hex=bin2hex($nonce);
/* add the above $hex as the hidden input */
/* serverside decode the input*/
$bin=hex2bin($hex);
<form method='post'>
<input type='hidden' name='nonce' value='<?php echo $hex;?>' />
<!-- other elements -->
<input type='submit' />
</form>
/* serverside */
$bin=hex2bin( $_POST['nonce'] );
更新:
进一步阅读这些原生钠法 sodium_hex2bin
和 sodium_bin2hex
Like
sodium_bin2hex()
,sodium_hex2bin()
is resistant to side-channel attacks while hex2bin() is not.
使用 SODIUM_CRYPTO_BOX_NONCEBYTES 而不是 SODIUM_CRYPTO_SECRETBOX_NONCEBYTES。