У меня есть сайт, который берет данные из формы и шифрует их, используя libsodium для php. Из-за того, что произошло на сервере, переменная CRYPTO_BOX_NONCEBYTES вернула 64 вместо 24. Теперь у нас есть несколько файлов, которые зашифрованы с помощью libsodium с использованием размера nonce 64, и у нас также есть связанные файлы nonce. Есть ли способ расшифровать это?
Другими словами, у меня есть файл, который был зашифрован с 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
Конечно, при наличии действительного зашифрованного текста, пары ключей и вашего 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);
}
Если это не сработает, могут быть и другие проблемы.
Других решений пока нет …