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 相关文章推荐
一个用mysql_odbc和php写的serach数据库程序
Oct 09 PHP
写php分页时出现的Fatal error的解决方法
Apr 18 PHP
PHP警告Cannot use a scalar value as an array的解决方法
Jan 11 PHP
用来解析.htpasswd文件的PHP类
Sep 05 PHP
解析如何在PHP下载文件名中解决乱码的问题
Jun 20 PHP
Joomla数据库操作之JFactory::getDBO用法
May 05 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
Nov 16 PHP
如何利用预加载优化Laravel Model查询详解
Aug 11 PHP
php-msf源码详解
Dec 25 PHP
Laravel框架表单验证操作实例分析
Sep 30 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
Apr 07 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
Mar 09 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下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
用PHP写的基于Memcache的Queue实现代码
2011/11/27 PHP
PHP正则表达式之定界符和原子介绍
2012/10/05 PHP
探讨PHP中this,self,parent的区别详解
2013/06/08 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
jquery中ajax学习笔记3
2011/10/16 Javascript
js读取被点击次数的简单实例(从数据库中读取)
2014/03/07 Javascript
javascript闭包的理解
2015/04/01 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
分享两段简单的JS代码防止SQL注入
2016/04/12 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
详解webpack 多入口配置
2017/06/16 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
浅谈JS封闭函数、闭包、内置对象
2017/07/18 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
详解如何在nuxt中添加proxyTable代理
2018/08/10 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
Map与WeakMap类型在JavaScript中的使用详解
2020/11/18 Javascript
基于Python的关键字监控及告警
2017/07/06 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
wxPython实现绘图小例子
2019/11/19 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
python中pow函数用法及功能说明
2020/12/04 Python
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
什么是GWT的Module
2013/01/20 面试题
高中课前三分钟演讲稿
2014/08/18 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
统计工作个人总结
2015/03/03 职场文书
导游词之新疆尼雅遗址
2019/10/16 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript
MySQL慢查询的坑
2021/04/28 MySQL
详解Python+OpenCV进行基础的图像操作
2022/02/15 Python