mcrypt_decrypt (): Clé de taille 15 non prise en charge par cet algorithme. Prise en charge uniquement des clés de tailles 16, 24 ou 32
Comment puis-je résoudre ce problème? ma clé est définie - ne peut pas la changer. Ce doit être un changement local, je pense que ma version locale PHP version est trop avancée pour le projet que j'ai chargé. Comment puis-je résoudre ce problème?
Avez-vous mis à jour vers 5.6? Ça dit
Les tailles de clé et iv non valides ne sont plus acceptées. mcrypt_decrypt () va maintenant lancer un avertissement et retourner FALSE si les entrées ne sont pas valides. Auparavant, les clés et les IV étaient remplis avec des octets "\ 0" à la taille valide suivante.
Lisez la dernière ligne de cette citation, et vous y trouverez votre solution :)
mcrypt_decrypt (): Clé de taille 15 non prise en charge par cet algorithme. Prise en charge uniquement des clés de tailles 16, 24 ou 32
Cela signifie que vous devez saisir votre clé avec \0
(c'est ce que les versions précédentes faisaient pour vous)
$key=$key."\0";
Je suis allé de l'avant et j'ai créé une fonction basée sur réponse de Hanky 웃 Panky .
Cela peut être utilisé avec n'importe quelle longueur de clé pour vous assurer que c'est la bonne taille.
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;
}
Pour Laravel 5
Exécutez simplement php artisan key:generate
:
Application key [EaaJgaD0uFDEg7tpvMOqKfAQ46Bqi8Va] set successfully.
Si vous ne voyez pas votre clé mise à jour, collez-la simplement dans votre .env
fichier.
APP_KEY=EaaJgaD0uFDEg7tpvMOqKfAQ46Bqi8Va
Rafraîchissez votre page
Vous n'avez pas besoin de remplir la clé avec "\ 0".
J'ai eu le même problème lors de la migration vers un nouveau serveur PHP 7 et j'ai reçu le message:
mcrypt_decrypt (): Clé de taille 19 non prise en charge par cet algorithme. Seules les clés de tailles 16, 24 ou 32 sont prises en charge.
La clé que j'avais dans le code était une chaîne de 19 caractères, je l'ai simplement changée en une chaîne de 32 caractères et tout allait bien à nouveau.
Ainsi, comme l'indique le message d'erreur, utilisez une clé de taille valide.
J'ai eu ce problème avec OSTicket 1.6 ST (oui, je connais l'ancienne version). La société d'hébergement vient de passer à PHP 5.6 et il a cassé la récupération de courrier pour cron.php. Je publie ceci en espérant que cela aide les autres à résoudre ce problème plus rapidement.
Vous devez éditer le fichier "include/class.misc.php".
Ajoutez la fonction "pad_key" fournie dans la réponse rédigée par @troskater au fichier "include/class.misc.php" puis à la ligne 51 dans la fonction "décryptage" changez
retour trim (mcrypt_decrypt (MCRYPT_RIJNDAEL_256, $ salt, ...
utiliser à la place
return trim (mcrypt_decrypt (MCRYPT_RIJNDAEL_256, pad_key ($ salt), ...
Vous pouvez simplement utiliser str_pad () pour cela. Dans sa forme la plus simple, cela suffira.
function padKey($key)
{
// Get the current key size
$keySize = strlen($key);
// Set an array containing the valid sizes
$validSizes = [16,24,32];
// Loop through sizes and return correct padded $key
foreach($validSizes as $validSize) {
if ($keySize <= $validSize) return str_pad($key, $validSize, "\0");
}
// Throw an exception if the key is greater than the max size
throw new Exception("Key size is too large");
}
Les autres réponses feront l'affaire. Je profite juste de la fonction intégrée PHP str_pad ici au lieu d'ajouter "\ 0" dans une boucle.
Si votre code de cryptage ressemble à ceci:
<?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);
}
?>
Vous voudrez changer la clé $ en un code crypté de 128 ou 256 bits. J'ai simplement copié un code que j'ai généré à partir d'ici: Generate Code
J'ai créé un code 256 bits pour le mien qui se compose de 32 caractères et résout ainsi le problème de la taille de clé non valide de 15 ou du nombre provoquant l'erreur. Donc, tout ce qui est défini pour $ key, vous devez le changer en un code valide et cela devrait fonctionner correctement.
J'ai eu le même problème, mais je l'ai résolu avec ce
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;
}