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输出控制功能在简繁体转换中的应用
Oct 09 PHP
PHP入门
Oct 09 PHP
php 输出双引号&quot;与单引号'的方法
May 09 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
Dec 19 PHP
解析yahoo邮件用phpmailer发送的实例
Jun 24 PHP
php断点续传之如何分割合并文件
Mar 22 PHP
yii框架通过控制台命令创建定时任务示例
Apr 30 PHP
分享PHP守护进程类
Dec 30 PHP
使用PHP实现微信摇一摇周边红包
Jan 04 PHP
PHP实现通过strace定位故障原因的方法
Apr 29 PHP
Laravel框架基于ajax实现二级联动功能示例
Jan 17 PHP
PHP面向对象类型约束用法分析
Jun 12 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
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
php把大写命名转换成下划线分割命名
2015/04/27 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
jquery入门—数据删除与隔行变色以及图片预览
2013/01/07 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
2015/03/03 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
jQuery插件ajaxfileupload.js实现上传文件
2020/10/23 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
Puppeteer 爬取动态生成的网页实战
2018/11/14 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
微信小程序实现点击页面出现文字
2020/09/21 Javascript
深入源码解析Python中的对象与类型
2015/12/11 Python
Python按行读取文件的实现方法【小文件和大文件读取】
2016/09/19 Python
Python 数据结构之旋转链表
2017/02/25 Python
使用pandas read_table读取csv文件的方法
2018/07/04 Python
对tensorflow中cifar-10文档的Read操作详解
2020/02/10 Python
详解Python爬虫爬取博客园问题列表所有的问题
2021/01/18 Python
PyCharm+Miniconda3安装配置教程详解
2021/02/16 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
副总经理岗位职责范本
2014/09/30 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
幼师自荐信范文
2015/03/06 职场文书
撤诉状格式范本
2015/05/19 职场文书
走近毛泽东观后感
2015/06/04 职场文书
新郎父亲婚礼致辞
2015/07/27 职场文书
导游词之泉州崇武古城
2019/12/20 职场文书
pycharm2021激活码使用教程(永久激活亲测可用)
2021/03/30 Python
Golang二维切片初始化的实现
2021/04/08 Golang
教你怎么用Python实现多路径迷宫
2021/04/29 Python
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript