저도 PHP가 처음인데 w3cschool을 통해 PHP의 기본 원리를 배우고 글을 쓰기 시작했습니다. 하지만 아직은 신인이다.
3DES 암호화 방법이 맞는지 아닌지에 관계없이 방법이 모두 온라인 상태입니다. 실행 시 오류가 보고되어 동생이 사망했습니다. 많은 검색 끝에 마침내 방법을 찾았습니다.
<?php /** * * PHP版3DES加解密类 * * 可与java的3DES(DESede)加密方式兼容 * * @Author: Luo Hui (farmer.luo at gmail.com) * * @version: V0.1 2008.12.04 * */ class Crypt3Des { public $key = "01234567890123456789012345678912"; public $iv = "23456789"; //like java: private static byte[] myIV = { 50, 51, 52, 53, 54, 55, 56, 57 }; //加密 public function encrypt($input) { $input = $this->padding( $input ); $key = base64_decode($this->key); $td = mcrypt_module_open( MCRYPT_3DES, '', MCRYPT_MODE_CBC, ''); //使用MCRYPT_3DES算法,cbc模式 mcrypt_generic_init($td, $key, $this->iv); //初始处理 $data = mcrypt_generic($td, $input); //加密 mcrypt_generic_deinit($td); //结束 mcrypt_module_close($td); $data = $this->removeBR(base64_encode($data)); return $data; } //解密 public function decrypt($encrypted) { $encrypted = base64_decode($encrypted); $key = base64_decode($this->key); $td = mcrypt_module_open( MCRYPT_3DES,'',MCRYPT_MODE_CBC,''); //使用MCRYPT_3DES算法,cbc模式 mcrypt_generic_init($td, $key, $this->iv); //初始处理 $decrypted = mdecrypt_generic($td, $encrypted); //解密 mcrypt_generic_deinit($td); //结束 mcrypt_module_close($td); $decrypted = $this->removePadding($decrypted); return $decrypted; } //填充密码,填充至8的倍数 public function padding( $str ) { $len = 8 - strlen( $str ) % 8; for ( $i = 0; $i < $len; $i++ ) { $str .= chr( 0 ); } return $str ; } //删除填充符 public function removePadding( $str ) { $len = strlen( $str ); $newstr = ""; $str = str_split($str); for ($i = 0; $i < $len; $i++ ) { if ($str[$i] != chr( 0 )) { $newstr .= $str[$i]; } } return $newstr; } //删除回车和换行 public function removeBR( $str ) { $len = strlen( $str ); $newstr = ""; $str = str_split($str); for ($i = 0; $i < $len; $i++ ) { if ($str[$i] != '\n' and $str[$i] != '\r') { $newstr .= $str[$i]; } } return $newstr; } } //test $input = "1qaz2ws"; echo "plainText:" . $input."<br/>"; $crypt = new Crypt3Des(); echo "Encode:".$crypt->encrypt($input)."<br/>"; echo "Decode:".$crypt->decrypt($crypt->encrypt($input)); ?>
코드를 읽을 필요 없이 안에 있는 문장만 보면 됩니다. $td = mcrypt_module_open( MCRYPT_3DES, '', MCRYPT_MODE_CBC, ''); 오류를 보고한 사람입니다.
많은 솔루션을 검색했는데 올바른 방법은 다음과 같습니다(Windows 시스템에만 해당).
PHP를 실행하는 서버에 libmcrypt.dll이 없으면 mcrypt_module_open 함수를 사용하세요. 오류.
문제를 해결하려면 서버에서 다음과 같이 설정하세요.
인터넷으로 이동하여 PHP mcrypt 모듈 설치 패키지를 다운로드하세요. libmcrypt.dll 파일만 필요합니다(일반적으로 공식 웹사이트에서 다운로드하고 이미 PHP 디렉토리에 있음)
1. libmcrypt.dll을 system32 디렉터리 또는 php 설치 디렉터리의 확장 디렉터리에 복사합니다
2. libmcrypt.dll을 Apache 설치 디렉터리의 bin 디렉터리에 복사합니다
3. Windows 디렉터리에서 php.ini 파일을 찾아 엽니다.
4. 로드 가능한 확장(모듈)이 있는 디렉터리를 찾습니다.
extension_dir = "./ " 예: Extension_dir = "D:php5ext"
이 두 줄은 libmcrypt.dll이 Extension_dir이 가리키는 디렉터리에서 찾을 수 있는지, 아니면 시스템 경로에 libmcrypt.dll이 있는지 확인하세요.
5 .Windows Extensions 항목에서 ;extension=php_mcrypt.dll 줄과 ;extension=php_iconv.dll 줄(내 것이 없어서 생략했습니다)을 찾아 제거합니다. 앞의 세미콜론
ps: 방금 시작했습니다. 온라인에서 솔루션을 찾아보니 php 설치 디렉터리에 있는 php.ini를 수정하라는 분들도 계시던데, 수정하고 나면 소용이 없습니다. Windows 디렉토리에서 php.ini를 수정하세요!
위 내용은 관련 내용을 포함하여 PHP 암호화 3DES 오류 호출에 대한 정의되지 않은 함수: mcrypt_module_open을 해결하는 방법을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.