>  기사  >  백엔드 개발  >  PHP7.1 암호화 함수 mcrypt_module_open()의 대체 기능을 찾고 있습니다.

PHP7.1 암호화 함수 mcrypt_module_open()의 대체 기능을 찾고 있습니다.

WBOY
WBOY원래의
2016-10-22 00:14:141692검색

오늘 PHP를 7.1로 업그레이드했는데 이 함수는 사용하지 않는 것이 좋습니다.
mcrypt_module_open()은 더 이상 사용되지 않습니다

교체할 수 있는 다른 옵션이 있나요?

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

7.1은 공식적으로 출시되지 않았고, 7.1의 출시 문서에는 앞으로 mcrypt와 같은 확장 프로그램을 사용하지 않는 것이 권장된다고 명시되어 있어 현재 이 문제에 대한 해결책이 없습니다. 같은 문제를 겪는 학생들이 있다면 버전 5나 7.0을 사용해 보세요.

답글 내용:

오늘 PHP를 7.1로 업그레이드했는데 이 함수는 사용하지 않는 것이 좋습니다.
mcrypt_module_open()은 더 이상 사용되지 않습니다

교체할 수 있는 다른 옵션이 있나요?

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

7.1은 공식적으로 출시되지 않았고, 7.1의 출시 문서에는 앞으로 mcrypt와 같은 확장 프로그램을 사용하지 않는 것이 권장된다고 명시되어 있어 현재 이 문제에 대한 해결책이 없습니다. 같은 문제를 겪는 학생들이 있다면 버전 5나 7.0을 사용해 보세요.

매뉴얼에 언급되지 않았다는 @eechen의 진술에 강력히 동의하지 않습니다! ?

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

설명서 원문 인용:

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

PHP 7.1에서는 mycrypt 확장을 PHP 설치 패키지에서도 찾아 사용할 수 있습니다. PHP 7.2에서는 제거되지만 여전히 PECL에서 소스 코드를 다운로드하고 이 확장을 컴파일하고 설치할 수 있습니다.

그러나 PHP의 제안을 따르고 점차적으로 OpenSSL을 통해 mcrypt의 역할을 교체하는 것이 가장 좋습니다.

비대칭 암호화를 사용할 수 있습니다! 공개키 암호화, 개인키 복호화.

mcrypt 확장은 7.1에서 더 이상 사용되지 않으며 7.2에서는 내장에서 PECL로 이동됩니다.

완벽한 호환성이 필요한 경우 더 이상 사용되지 않는 기능만 무시하고 사용할 수 있습니다.
유사한 기능을 갖춘 대체 제품만 필요한 경우 공식적인 권장 사항은 OpenSSL 확장 프로그램을 사용하는 것입니다.

자세한 내용은 공식 매뉴얼을 참고해주세요.

그런데 매뉴얼에 deprecated 경고가 없어서 대안에 대한 설명이 없습니다.
그리고 PHP 7.0을 실행해보면 권장하지 않는다는 그런 경고가 없습니다.
마지막으로, 말씀하신 7.1은 아직 공식적으로 출시되지 않았으니 버그로 처리하셔도 됩니다.

보충:
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>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.