2016-07-13 78 views
6

正如你们可能知道的那样,扩展mcrypt将在PHP 7.1上被弃用。用openssl_encrypt替换mcrypt_encrypt

我用来维护一个我希望最终迁移到这个版本的“遗留”应用程序,所以我运行了测试并验证了我无法再获得100%的覆盖率,因为有一段代码使用以下代码:

$key = 'sA*(DH'; 

// initialization vector 
$iv = md5(md5($key)); 
$output = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string,  MCRYPT_MODE_CBC, $iv)); 

我试图端口这段代码使用此代码

$key = md5('sA*(DH'); 
$iv = md5($key); 
echo base64_encode(openssl_encrypt($data, "aes-256-cbc", $key, OPENSSL_RAW_DATA, $iv)); 

但是我有2个问题与该给openssl_encrypt:

  1. 的IV lenght应为16个字符(和MD5给了我32),所以我得到一个PHP的警告
  2. 输出它的不一样(即使我截断为16个字符)

人有类似的问题(或知道如何解决它?)

顺便说一句:我使用开发主版本的PHP(应该是7.1.0 alpha 3)。

回答

1

你真的应该摆脱使用md5做任何事情的习惯。

$iv = openssl_random_pseudo_bytes(16); 
$key = substr(hash('sha256', 'sA*(DH'), 0, 32) 

mcrypt_encryptopenssl_encrypt不会输出相同crypttext给予相同的明文和密钥。

mcrypt已被弃用的PHP 7.1,不删除......这样你就可以升级到7.1,而不改变从mcryptopenssl ...但它是一个好主意,一般去除mcrypt

+0

感谢您的答案,但原来的代码不是我的,我真的没有使用md5实际上没有。 要试试这个,谢谢。 –