PHP和Sodium-无法以某种形式公开传递随机数

时间:2019-04-05 10:23:57

标签: php encryption nonce libsodium sodium

正如标题所示,我很难通过表格公开传递现时值。我尝试过使用表单中的隐藏字段并将值作为url中的参数传递。

随机数是使用以下方法创建的:

$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES)

当我尝试使用隐藏字段(POST)或url(GET)形式的检索值(例如,sodium_crypto_secretbox_open)时,返回以下错误:

  

未捕获的SodiumException:随机数大小应为SODIUM_CRYPTO_SECRETBOX_NONCEBYTES字节

我很欣赏随机数字符串的大小受到影响,但是我不知道如何解决这个问题。

当我回显检索到的随机数时,它看起来不错。在随机数被回显出来后,似乎出现了一个问题,即它会改变大小,并被认为不适用于钠。

任何建议将不胜感激。

2 个答案:

答案 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。