正如标题所示,我很难通过表格公开传递现时值。我尝试过使用表单中的隐藏字段并将值作为url中的参数传递。
随机数是使用以下方法创建的:
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES)
当我尝试使用隐藏字段(POST)或url(GET)形式的检索值(例如,sodium_crypto_secretbox_open)时,返回以下错误:
未捕获的SodiumException:随机数大小应为SODIUM_CRYPTO_SECRETBOX_NONCEBYTES字节
我很欣赏随机数字符串的大小受到影响,但是我不知道如何解决这个问题。
当我回显检索到的随机数时,它看起来不错。在随机数被回显出来后,似乎出现了一个问题,即它会改变大小,并被认为不适用于钠。
任何建议将不胜感激。
答案 0 :(得分:1)
二进制值在请求中发送时转换得不好,因此您可能会考虑的一件事是使用bin2hex
转换原始随机数,添加为隐藏输入,然后使用{{ 1}}
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
一样,sodium_bin2hex()
可以抵抗side-channel attacks 而hex2bin()不是。
答案 1 :(得分:0)
使用 SODIUM_CRYPTO_BOX_NONCEBYTES 而不是 SODIUM_CRYPTO_SECRETBOX_NONCEBYTES。