Intereting Posts

Размер ключа изменения ключа mcrypt_decrypt ()

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 или любым числом, вызывающим ошибку. Итак, что бы установить для ключа $, вам нужно изменить это на действительный код, а затем он должен работать нормально.