2016-05-16 39 views
1

更換過時的mcrypt_cbc我有一箇舊的算法進行編碼,我想用PHP 7與mcrypt_encrypt

public function encriptarPass($cadena) 
{ 
    $extra = (strlen($cadena)%8); 
    for ($i = $extra; $i < 8; $i++) { 
     $cadena .= chr(8-$extra); 
    } 
    $key = "stack"; 
    $iv = "stack";      

    return strtoupper(bin2hex(mcrypt_cbc(MCRYPT_3DES, $key, $cadena, MCRYPT_ENCRYPT, $iv))); 
} 

使用我試着用mcrypt_encrypt更換mcrypt_cbc密碼和我得到這個錯誤:

mcrypt_encrypt(): Module initialization failed

我想更新算法以使用存儲在數據庫中的舊密碼。 我知道我應該使用bcrypt或其他算法,但目前我需要更新這個舊算法

+1

最好不要使用mcrypt的,它是放棄的,已經多年沒有更新,不支持標準的PKCS#7(姓PKCS#5)填充,只非標準的null填充,甚至不能用於二進制數據。 mcrypt有很多優秀的[bug](https://sourceforge.net/p/mcrypt/bugs/)可以追溯到2003年。反而考慮使用[defuse](https://github.com/defuse/php-encryption)它正在維護和正確。 – zaph

回答

0

這兩個函數將返回相同的。

function encriptarPass($cadena){ 
    $extra = (strlen($cadena)%8); 
    for($i = $extra; $i < 8; $i++) { 
     $cadena .= chr(8-$extra); 
    } 
    $key = "stack"; 
    $iv = "stack111"; 
    return strtoupper(bin2hex(mcrypt_cbc(MCRYPT_3DES, str_pad($key, 24, "\0"), $cadena, MCRYPT_ENCRYPT, $iv))); 
} 

function encriptarPass2($cadena){ 
    $extra = (strlen($cadena)%8); 
    for($i = $extra; $i < 8; $i++) { 
     $cadena .= chr(8-$extra); 
    } 

    $key = "stack"; 
    $iv = "stack111"; 
    return strtoupper(bin2hex(mcrypt_encrypt(MCRYPT_3DES, str_pad($key, 24, "\0"), $cadena, MCRYPT_MODE_CBC, $iv))); 
} 

例子:

echo encriptarPass('test987x'); // Writes 10C9B50682CC21909AC4346CDFC4586E 
echo encriptarPass2('test987x'); // Writes 10C9B50682CC21909AC4346CDFC4586E 
+0

它的工作,但現在我有這個問題:'mcrypt_encrypt():該算法不支持大小9的密鑰。只有尺寸24的鑰匙支持' 任何方式使用它與9尺寸的鑰匙? – Luis

+0

在PHP 5.6中,他們改變了行爲,使無效的密鑰大小不再被接受。在5.6之前,密鑰用'\ 0'填充。我編輯了我的答案,用'\ 0'填充鍵。 –

相關問題