Warning: openssl_decrypt(): Failed to base64 decode the input

rafaello

Новичок
Привет всем!
Есть вопрос по работе функции openssl_decrypt()
Необходимо через URL браузера передать зашифрованную фразу.
Соответственно, есть два файла. Первый шифрует и сохраняет в БД.
Потом через браузер это хозяйство передается на другой файл, где искомая фраза расшифровывается.
Все работает нормально.
Однако мне надо выполнить защиту от дурака, а именно, процесс копирования и вставки в браузер шифрованной фразы
производится разными юзерами и соответственно, кто то может скопировать код не полностью.
Короче, проблема в том, что если в строке кода упущен хоть один символ, то на экран выходит ошибка,
указанная в заголовке тикета.
Я понимаю, что можно отключить вывод ошибок и предупреждений на экран, но все таки это не лучшее решение.
Хотелось бы вобщем избежать это предупреждение.
файл первый
PHP:
$textToEncrypt = "privet";
$encryptionMethod = "aes-128-xts";
$secret = "C34095W8g";
$iv = '12345';
$encryptedText = openssl_encrypt($textToEncrypt,$encryptionMethod,$secret, 0, $iv);
файл второй
PHP:
$url = 'http://my-site.com?gg='.rawurlencode($encryptedText);
$text_to_Decrypt = $_GET['gg'];
$encryptionMethod = "aes-128-xts";
$secret = "C34095W8g";
$iv = '12345';
$decryptedText = openssl_decrypt($text_to_Decrypt, $encryptionMethod, $secret, 0, $iv);
Так вот, если в переменной $encryptedText изменить хотя бы один символ, то выходит это самое предупреждение.
Как этого избежать?
 

rafaello

Новичок
PHP:
$iv = '1234567812345678';
if($decryptedText !== false){здесь выполняется код}
небольшие изменения/дополнения
$iv не может быть менее 16 bytes
 

rafaello

Новичок
я так понимаю, что проверить переменную $text_to_Decrypt перед выполнением openssl_decrypt() нет возможности.
Может еще порекомендуете другие способы шифрования с ключом для передачи через url и чтобы шифрованная фраза была не очень длинной?
 

WMix

герр M:)ller
Партнер клуба
вне зависимости от способа, пиши ошибки в лог, отключи вывод на экран, это обязательно (в своем локальном окружении можно выводить на экран, на продакшине нет). тем более что это решает выше изложенную проблему, тем более что это не единственное сообщение которые вероятнее всего видят пользователи
 

fixxxer

К.О.
Партнер клуба
да там скрипты в 5 строк а не какой-то продукт нормальный

собаку поставить и всё, это тот случай когда можно
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
сложно сделать решение хуже, потому что
а) вместо шифрованной фразы можно передать ULID записи в базе
б) для передачи зашифрованной строки в URL есть стандарт JWT
в) лучше sodium (polyfil)
 
Сверху