求PHP7.1 加密函数mcrypt_module_open()替换方案

WBOY
Freigeben: 2016-10-22 00:14:14
Original
1691 Leute haben es durchsucht

今天把php升级到7.1了,结果发现这个函数不建议使用:
mcrypt_module_open() is deprecated

请问还有其它方案来替换吗?

==============================

因为7.1还没有正式发布,而且7.1的发布文档上面写了以后不建义使用类似mcrypt的扩展,所以该问题目前无解。如果有遇到相同问题的同学,请使用5版或7.0版 。

回复内容:

今天把php升级到7.1了,结果发现这个函数不建议使用:
mcrypt_module_open() is deprecated

请问还有其它方案来替换吗?

==============================

因为7.1还没有正式发布,而且7.1的发布文档上面写了以后不建义使用类似mcrypt的扩展,所以该问题目前无解。如果有遇到相同问题的同学,请使用5版或7.0版 。

非常不赞同 @eechen 的说法,谁说手册上没说的!?

http://php.net/manual/zh/migr...

引用手册原文:

<code>mcrypt 扩展已经过时了大约10年,并且用起来很复杂。因此它被废弃并且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除并且移到PECL中。</code>
Nach dem Login kopieren

在PHP 7.1中还能在PHP安装包中找到和使用mycrypt扩展,在PHP 7.2中会被移除,不过我们依然可以从PECL下载到源码,编译和安装这个扩展。

不过最好还是遵循PHP的建议,通过OpenSSL逐渐取代mcrypt所扮演的角色。

可以使用非对称加密方式!公钥加密,私钥解密。

mcrypt 扩展在 7.1 已经被 deprecated, 在 7.2 会被从内置迁到 PECL 里。

如果需要完全兼容只能忽略 deprecated 使用;
如果只是需要类似功能的替代品,官方建议是使用 OpenSSL 扩展。

具体可以看官方手册。

但是手册上并没有deprecated的Warning呀,自然也就没有说明替代方案.
而且我用PHP 7.0运行也没有这个不建议使用的提示.
最后就是你说的7.1还没有正式发布,你可以把它当做一个bug.

补充:
多谢楼下提醒,PHP手册在7.1迁移页面给出了替代方案,就是用OpenSSL取代MCrypt.
下面看看用OpenSSL实现对称加密AES和非对称加密RSA.

<code>AES:
<?php header('Content-Type: text/plain;charset=utf-8');
$data = 'phpbest';
$key = 'oScGU3fj8m/tDCyvsbEhwI91M1FcwvQqWuFpPoDHlFk='; //echo base64_encode(openssl_random_pseudo_bytes(32));
$iv = 'w2wJCnctEG09danPPI7SxQ=='; //echo base64_encode(openssl_random_pseudo_bytes(16));
echo '内容: '.$data."\n";

$encrypted = openssl_encrypt($data, 'aes-256-cbc', base64_decode($key), OPENSSL_RAW_DATA, base64_decode($iv));
echo '加密: '.base64_encode($encrypted)."\n";

$encrypted = base64_decode('To3QFfvGJNm84KbKG1PLzA==');
$decrypted = openssl_decrypt($encrypted, 'aes-256-cbc', base64_decode($key), OPENSSL_RAW_DATA, base64_decode($iv));
echo '解密: '.$decrypted."\n";
?>

RSA:
用openssl生成rsa密钥对(私钥/公钥):
openssl genrsa -out rsa_private_key.pem 1024
openssl rsa -pubout -in rsa_private_key.pem -out rsa_public_key.pem
<?php header('Content-Type: text/plain;charset=utf-8');
$data = 'phpbest';
echo '原始内容: '.$data."\n";

openssl_public_encrypt($data, $encrypted, file_get_contents(dirname(__FILE__).'/rsa_public_key.pem'));
echo '公钥加密: '.base64_encode($encrypted)."\n";

$encrypted = base64_decode('nMD7Yrx37U5AZRpXukingESUNYiSUHWThekrmRA0oD0=');
openssl_private_decrypt($encrypted, $decrypted, file_get_contents(dirname(__FILE__).'/rsa_private_key.pem'));
echo '私钥解密: '.$decrypted."\n";
?></code>
Nach dem Login kopieren
Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!