0

我设置了一个站点,它从表单中获取数据并使用 libsodium for php 对其进行加密。由于服务器上发生的一些事情,CRYPTO_BOX_NONCEBYTES 变量以某种方式返回 64 而不是 24。我们现在有几个使用 libsodium 加密的文件,使用的随机数大小为 64,我们也有相关的随机数文件。有没有办法解密这个?

换句话说,我有一个使用 64 位随机数加密的文件。当我尝试使用相同的 64 位随机数对其进行解密时,它失败并出现以下错误:

PHP Fatal error:  crypto_box_open(): nonce size should be CRYPTO_BOX_NONCEBYTES long in /data/www/docroot/filename.php on line 42
4

1 回答 1

1

当然,给定一个有效的密文、密钥对和你的 64 字节随机数,你应该能够做到这一点:

// Keep increasing this from 0 to 39 to see if you can grab the 
// correct slice of the nonce string:
$try = 0;

// Then run the rest of the code and hope you didn't get a fatal error.
$substr = mb_substr($your_64byte_nonce, $try, $try + \Sodium\CRYPTO_BOX_NONCEBYTES, '8bit');
$decrypted = \Sodium\crypto_box_open($message, $substr, $keypair);
if ($decrypted !== false) {
    echo $decrypted, "\n";
    echo "The magic slicing point is {$try}.\n";
} else {
    exit(1);
}

如果它不起作用,可能还有其他问题。

于 2015-09-30T17:32:02.527 回答