mcrypt_decrypt (): Ключ размера 15 не поддерживается этим алгоритмом. Поддерживаются только ключи с размерами 16, 24 или 32
Как я могу исправить эту проблему? мой ключ установлен – не может его изменить. Это должно быть локальное изменение, я думаю, что моя локальная версия PHP слишком продвинута для загруженного проекта. Как я могу это исправить?
Вы обновили до 5.6? В нем говорится:
Недопустимые значения ключа и iv больше не принимаются. mcrypt_decrypt () теперь выдает предупреждение и возвращает FALSE, если входы недействительны. Раньше клавиши и IV были дополнены байтами '\ 0' до следующего допустимого размера.
Справка
Прочитайте последнюю строку этой цитаты, и там вы найдете свое решение 🙂
mcrypt_decrypt (): Ключ размера 15 не поддерживается этим алгоритмом. Поддерживаются только ключи с размерами 16, 24 или 32
Это означает, что вам нужно надеть свой ключ с помощью \0
(это то, что делали предыдущие версии)
$key=$key."\0";
Я пошел вперед и создал функцию, основанную на ответе Ханки 웃 Панки .
Это можно использовать с любой длиной ключа, чтобы убедиться, что это правильный размер.
function pad_key($key){ // key is too large if(strlen($key) > 32) return false; // set sizes $sizes = array(16,24,32); // loop through sizes and pad key foreach($sizes as $s){ while(strlen($key) < $s) $key = $key."\0"; if(strlen($key) == $s) break; // finish if the key matches a size } // return return $key; }
Для Laravel 5
Просто запустите php artisan key:generate
:
Application key [EaaJgaD0uFDEg7tpvMOqKfAQ46Bqi8Va] set successfully.
Если вы не видите обновленный ключ, просто вставьте его в файл .env
.
APP_KEY=EaaJgaD0uFDEg7tpvMOqKfAQ46Bqi8Va
Обновить страницу
Вам не нужно набивать ключ «\ 0».
У меня была такая же проблема при переносе на новый сервер PHP 7, и я получил сообщение:
mcrypt_decrypt (): Ключ размера 19 не поддерживается этим алгоритмом. Поддерживаются только ключи размером 16, 24 или 32.
Ключ, который у меня был в коде, был строкой из 19 символов, я просто изменил его на строку из 32 символов, и все было хорошо.
Как следует из сообщения об ошибке, используйте действительный размер ключа.
У меня была проблема с OSTicket 1.6 ST (да, старая версия, которую я знаю). Хостинговая компания просто отправилась на PHP 5.6, и она сломала Mail Fetch для cron.php. Я отправляю это в надежде, что это поможет другим решить эту проблему быстрее.
Вы должны отредактировать файл «include / class.misc.php».
Добавьте функцию «pad_key», указанную в ответе автора @troskater, в файл «include / class.misc.php», а затем в строке 51 в функции «decrypt» change
(mcrypt_decrypt (MCRYPT_RIJNDAEL_256, $ salt , …
вместо этого использовать
(mcrypt_decrypt (MCRYPT_RIJNDAEL_256, pad_key ($ salt) , …
У меня была та же проблема, но я исправил это
public function setKey($key) { $len = strlen($key); if($len < 24 && $len != 16){ $key = str_pad($key, 24, "\0", STR_PAD_RIGHT); } elseif ($len > 24 && $len < 32) { $key = str_pad($key, 32, "\0", STR_PAD_RIGHT); }elseif ($len > 32){ $key = substr($key, 0, 32); } $this->key = $key; }
Если ваш код шифрования выглядит следующим образом:
<?php function encryptCookie($value){ if(!$value){return false;} $key = 'aNdRgUkXp2s5v8y/B?E(H+MbQeShVmYq'; $text = $value; $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv); return trim(base64_encode($crypttext)); //encode for cookie } function decryptCookie($value){ if(!$value){return false;} $key = 'aNdRgUkXp2s5v8y/B?E(H+MbQeShVmYq'; $crypttext = base64_decode($value); //decode cookie $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv); return trim($decrypttext); } ?>
Вы захотите изменить ключ $ на 128 или 256-битный зашифрованный код. Я просто скопировал код, который я создал здесь: Создать код
Я создал 256-битный код для моего, который состоит из 32 символов и, таким образом, устраняет проблему с недопустимым размером ключа 15 или любым числом, вызывающим ошибку. Итак, что бы установить для ключа $, вам нужно изменить это на действительный код, а затем он должен работать нормально.