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 相关文章推荐
使用php4加速网络传输
Oct 09 PHP
PHP JSON 数据解析代码
May 26 PHP
PHP垃圾回收机制引用计数器概念分析
Jun 24 PHP
CURL状态码列表(详细)
Jun 27 PHP
PHP中使用imagick生成PSD文件缩略图教程
Jan 26 PHP
php查询mysql大量数据造成内存不足的解决方法
Mar 04 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
May 09 PHP
postfixadmin忘记密码后的修改密码方法详解
Jul 20 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
Feb 15 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
Jan 15 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 PHP
PHP7 list() 函数修改
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中Collection 类的设计
2013/06/21 PHP
解析csv数据导入mysql的方法
2013/07/01 PHP
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
PHP实现财务审核通过后返现金额到客户的功能
2019/07/04 PHP
基于PHP实现微信小程序客服消息功能
2019/08/12 PHP
php求斐波那契数的两种实现方式【递归与递推】
2019/09/09 PHP
jQuery中需要注意的细节问题小结
2011/12/06 Javascript
js快速排序的实现代码
2013/12/08 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
JavaScript使用focus()设置焦点失败的解决方法
2014/09/03 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
2017/06/22 Javascript
如何理解Vue的.sync修饰符的使用
2017/08/17 Javascript
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
Vue项目中配置pug解析支持
2019/05/10 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
如何利用Anaconda配置简单的Python环境
2019/06/24 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
this关键字的含义
2015/04/08 面试题
怎么写有吸引力的自荐信
2013/11/17 职场文书
党员作风建设整改方案
2014/10/27 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
开场白怎么写
2015/06/01 职场文书
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android
idea编译器vue缩进报错问题场景分析
2021/07/04 Vue.js