php的mcrypt扩展已废弃问题解决
php 的 mcrypt_ 函数簇在 7.1.0 版本中开始 deprecated,并在 7.2.0 版本中彻底废弃。如果当前项目存在mcrypt_ encrypt这种函数又想更新php到最新版本
官方推荐使用openssl_encrypt/openssl_decrypt替代mcrypt_encrypt和mcrypt_decrypt
MCRYPT_RIJNDAEL_256 并不是 AES-256,如果想使用 mcrypt_簇 实现 AES-256,则你应该使用 MCRYPT_RIJNDAEL_128 算法 + 32位的 key,openssl_簇 则更为清晰的明确了各种模式。这里我整理了一下对应关系供大家参考:
MCRYPT_RIJNDAEL_128 & CBC + 16位Key = openssl_encrypt(AES-128-CBC, 16位Key) = AES-128MCRYPT_RIJNDAEL_128 & CBC + 24位Key = openssl_encrypt(AES-192-CBC, 24位Key) = AES-192MCRYPT_RIJNDAEL_128 & CBC + 32位Key = openssl_encrypt(AES-256-CBC, 32位Key) = AES-256
我们这里写个例子
mcrypt代码:
<?php$key = 'keykeykey';//注意这里我使用的32位的key$key = md5(md5($key) . 'salt');$iv = md5($key, true);$data = 'asdfgh';$encode = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CFB, $iv);$encode = base64_encode($encode);echo $encode . PHP_EOL;//处理解密$decode = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($encode), MCRYPT_MODE_CFB, $iv);echo $decode;echo PHP_EOL;
openssl代码
$key = 'keykeykey';$key = md5(md5($key) . 'salt');$iv = md5($key, true);$data = 'asdfgh';$encode = openssl_encrypt($data, 'aes-256-cfb', $key, OPENSSL_RAW_DATA, $iv);//完美替换$encode = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CFB, $iv);$encode = base64_encode($encode);echo $encode . '<br>';//解密$decode = openssl_decrypt(base64_decode($encode), 'aes-256-cfb', $key, OPENSSL_RAW_DATA, $iv);echo $decode;
重点是openssl这里,我使用的是aes-256-cfb(因为mcrypt那里使用的是32位的key,如果是16位的key请参考上面对应关系)
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。