PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决


Posted in PHP onApril 17, 2016

我也是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安装目录下的extensions目录下

2.将libmcrypt.dll复制到apache安装目录的bin目录下

3.到windows目录下找到php.ini文件,打开它

4.找到; Directory in which the loadable extensions (modules) reside.
extension_dir = "./" 如:extension_dir = "D:\php5\ext"

这两行,要使extension_dir指向的目录下能找到libmcrypt.dll,或系统path下有libmcrypt.dll

5.找到;Windows Extensions 项下面的;extension=php_mcrypt.dll这一行和;extension=php_iconv.dll(我的没有,省略了)这两行,去掉前面的分号

ps:刚开始看网上的解决方法,有的说修改php安装目录下的php.ini,但是修改后是没用的。一定要修改windows目录下的php.ini!

PHP 相关文章推荐
php cout&amp;lt;&amp;lt;的一点看法
Jan 24 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
Jul 16 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
Jun 23 PHP
PHP中SimpleXML函数用法分析
Nov 26 PHP
PHP多线程之内部多线程实例分析
Mar 09 PHP
PHP微信开发之模板消息回复
Jun 24 PHP
php进程间通讯实例分析
Jul 11 PHP
PHP使用Redis替代文件存储Session的方法
Feb 15 PHP
CakePHP框架Session设置方法分析
Feb 23 PHP
PHP容器类的两种实现方式示例
Jul 24 PHP
php使用pecl方式安装扩展操作示例
Aug 12 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 PHP
orm获取关联表里的属性值
Apr 17 #PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
Apr 15 #PHP
php基于jquery的ajax技术传递json数据简单实例
Apr 15 #PHP
PHP6连接SQLServer2005的三部曲
Apr 15 #PHP
php使用pear_smtp发送邮件
Apr 15 #PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
Apr 15 #PHP
php生成图片验证码的方法
Apr 15 #PHP
You might like
php判断对象是派生自哪个类的方法
2015/06/20 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
php实现页面纯静态的实例代码
2017/06/21 PHP
php使用event扩展的io复用测试的示例
2020/10/20 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
JavaScript 撑出页面文字换行
2009/06/15 Javascript
一行代码告别document.getElementById
2012/06/01 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
2016/09/15 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
Vue使用json-server进行后端数据模拟功能
2018/04/17 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
vue 使用async写数字动态加载效果案例
2020/07/18 Javascript
解决vue字符串换行问题(绝对管用)
2020/08/06 Javascript
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
在Python的Django框架中为代码添加注释的方法
2015/07/16 Python
Python实现密码薄文件读写操作
2019/12/16 Python
Python3.9.1中使用match方法详解
2021/02/08 Python
css背景图片的背景裁切、背景透明度、背景变换等效果运用
2012/12/24 HTML / CSS
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
美国销售第一的智能手机和平板电脑保护壳:OtterBox
2017/12/21 全球购物
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
建筑设计师岗位职责
2013/11/18 职场文书
打架检讨书800字
2014/01/10 职场文书
道歉情书大全
2015/05/12 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
85句关于理想的名言警句大全
2019/08/22 职场文书
CKAD认证中部署k8s并配置Calico插件
2022/03/31 Servers