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操作类
Nov 16 PHP
默默小谈PHP&amp;MYSQL分页原理及实现
Jan 02 PHP
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
Jul 21 PHP
PHP5 字符串处理函数大全
Mar 23 PHP
PHP extract 将数组拆分成多个变量的函数
Jun 30 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
Sep 28 PHP
纯PHP生成的一个树叶图片画图例子
Apr 16 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
May 12 PHP
php 魔术常量详解及实例代码
Dec 04 PHP
php实现 master-worker 守护多进程模式的实例代码
Jul 20 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 30 PHP
PHP中SESSION过期设置
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实现的构造sql语句类实例
2016/02/03 PHP
PHP实现数组根据某个单元字段排序操作示例
2018/08/01 PHP
javaScript - 如何引入js代码
2021/03/09 Javascript
javascript的键盘控制事件说明
2008/04/15 Javascript
javascript showModalDialog模态对话框使用说明
2009/12/31 Javascript
nodejs win7下安装方法
2012/05/24 NodeJs
js中的replace方法使用介绍
2013/10/28 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
jquery登录的异步验证操作示例
2019/05/09 jQuery
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
vue-router为激活的路由设置样式操作
2020/07/18 Javascript
Vue实现开关按钮拖拽效果
2020/09/22 Javascript
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
实例解析Python设计模式编程之桥接模式的运用
2016/03/02 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
Python基础之函数的定义与使用示例
2019/03/23 Python
Python字符串格式化f-string多种功能实现
2020/05/07 Python
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
MVMT手表官方网站:时尚又实惠的高品质手表
2016/12/04 全球购物
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
中文师范生自荐信
2014/01/30 职场文书
退伍老兵事迹材料
2014/01/31 职场文书
感恩父母的演讲稿
2014/05/06 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
2014小学教师个人工作总结
2014/11/10 职场文书
婚庆答谢词大全
2015/09/29 职场文书
HDFS免重启挂载新磁盘
2022/04/06 Servers