2016-05-16 108 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'填充键。 –

相关问题