PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
我也是PHP新手,通过w3cschool了解了一下php基本原理之后就开写了。但仍是菜鸟。
先不管3DES加密的方法对不对,方法都是网上的,在运行的时候报了个错,把小弟整死了。找来找去终于自己摸出了方法。
<?php
/**
*
*PHP版3DES加解密类
*
*可与java的3DES(DESede)加密方式兼容
*
*@Author:LuoHui(farmer.luoatgmail.com)
*
*@version:V0.12008.12.04
*
*/
classCrypt3Des
{
public$key="01234567890123456789012345678912";
public$iv="23456789";//likejava:privatestaticbyte[]myIV={50,51,52,53,54,55,56,57};
//加密
publicfunctionencrypt($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;
}
//解密
publicfunctiondecrypt($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的倍数
publicfunctionpadding($str)
{
$len=8-strlen($str)%8;
for($i=0;$i<$len;$i++)
{
$str.=chr(0);
}
return$str;
}
//删除填充符
publicfunctionremovePadding($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;
}
//删除回车和换行
publicfunctionremoveBR($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=newCrypt3Des();
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安装目录下的extensions目录下
2.将libmcrypt.dll复制到apache安装目录的bin目录下
3.到windows目录下找到php.ini文件,打开它
4.找到;Directoryinwhichtheloadableextensions(modules)reside.
extension_dir="./"如:extension_dir="D:\php5\ext"
这两行,要使extension_dir指向的目录下能找到libmcrypt.dll,或系统path下有libmcrypt.dll
5.找到;WindowsExtensions项下面的;extension=php_mcrypt.dll这一行和;extension=php_iconv.dll(我的没有,省略了)这两行,去掉前面的分号
ps:刚开始看网上的解决方法,有的说修改php安装目录下的php.ini,但是修改后是没用的。一定要修改windows目录下的php.ini!