mcrypt_decrypt():此算法不支持大小爲15的密鑰。僅支持尺寸爲16,24或32的按鍵mcrypt_decrypt()錯誤更改密鑰大小
如何解決此問題?我的密鑰已設置 - 無法更改。 它必須是本地更改,我認爲我的本地PHP版本對於我加載的項目來說太高級了。 我該如何解決這個問題?
mcrypt_decrypt():此算法不支持大小爲15的密鑰。僅支持尺寸爲16,24或32的按鍵mcrypt_decrypt()錯誤更改密鑰大小
如何解決此問題?我的密鑰已設置 - 無法更改。 它必須是本地更改,我認爲我的本地PHP版本對於我加載的項目來說太高級了。 我該如何解決這個問題?
你有更新到5.6嗎?它說
無效的密鑰和iv尺寸不再被接受。如果輸入無效,mcrypt_decrypt()現在將引發警告並返回FALSE。以前,鍵和IV用'\ 0'字節填充到下一個有效大小。
閱讀報價的最後一行,在那裏你會發現你的解決方案:)
mcrypt_decrypt():大小15重點不是這個算法的支持。大小16,24或32的唯一密鑰支持
這意味着你需要墊\0
密鑰(這是以前版本中爲你做)
$key=$key."\0";
所以我該如何解決這個問題? – 2014-12-02 16:45:02
'以前,密鑰和IV用'\ 0'字節填充到下一個有效大小。「您也是這樣做的:) – 2014-12-02 16:45:18
會喜歡」如何做到這一點「的鏈接。如果你有一個 – 2014-12-02 16:47:29
我繼續創建了一個功能基於Hanky 웃 Panky's answer。
這可以用於任何密鑰長度,以確保它是正確的大小。
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;
}
您不需要用「\ 0」填充密鑰。
我遷移到一個新的PHP 7服務器時有同樣的問題,我得到的消息:
mcrypt_decrypt():大小19重點不是這個算法的支持。僅支持尺寸爲16,24或32的 按鍵。
我在代碼中的密鑰是19個字符的字符串,我只是將其更改爲32個字符的字符串,一切都很好。
因此,如錯誤消息所示,請使用有效的大小鍵。
我有這個問題與OSTicket 1.6 ST(是舊版本我知道)。主機公司剛剛進入PHP 5.6,並打破了cron.php的Mail Fetch。我發佈這個希望它可以幫助其他人更快地解決這個問題。
你必須編輯文件「include/class.misc.php」。
將由@troskater創作的答案中提供的函數「pad_key」添加到「include/class.misc。PHP的」文件,然後在功能線51 「解密」 改變
回報修剪(mcrypt_decrypt(MCRYPT_RIJNDAEL_256,$鹽,...
改用
回報裝飾(mcrypt_decrypt(MCRYPT_RIJNDAEL_256,pad_key($鹽) ...
對於Laravel 5
只要運行php artisan key:generate
:
Application key [EaaJgaD0uFDEg7tpvMOqKfAQ46Bqi8Va] set successfully.
如果你沒有看到你的關鍵更新,只需將其粘貼在你的.env
文件。
APP_KEY=EaaJgaD0uFDEg7tpvMOqKfAQ46Bqi8Va
刷新頁面
我有同樣的問題,但這個
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位加密的代碼。我簡單地複製了我從這裏生成的代碼:Generate Code
我創建了一個由32位字符組成的256位代碼,從而修復了無效密鑰大小爲15或任何數字導致錯誤的問題。所以無論爲$ key設置,你都需要將其改爲有效的代碼,然後它應該可以正常工作。
您沒有給我們足夠的信息。您是否使用正確的密碼來解密字符串(使用加密的密碼)?不同的密碼支持不同的密鑰大小。 http://php.net/manual/en/function.mcrypt-decrypt.php – 2014-12-02 16:40:47
項目文件在其他機器上工作,所以密碼是好的 - 進一步 - 重新安裝我的xampp之前一切正常 – 2014-12-02 16:42:15
注意到:if你正在通過'$ key = 0x12345679ABCDEF'創建一個足夠的int,傳入的值是12-19位(十進制)字符串,以字符數組「-1234567」而不是32位二進制值。 (它通過標準方法將int轉換爲字符串)。密鑰必須通過「\ xab \ xcd \ xef \ x01 \ x02」定義爲字符串(又名:數組/緩衝區)。但是,直到更新到版本5.6之前,您才意識到這個問題已經解決。你實際上已經傳遞了一個短數字字符串,它得到空填充 – ppostma1 2016-11-07 18:38:43