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实现的MySQL数据浏览器
Mar 11 PHP
php 记录进行累加并显示总时长为秒的结果
Nov 04 PHP
php获取本地图片文件并生成xml文件输出具体思路
Apr 27 PHP
php中利用str_pad函数生成数字递增形式的产品编号
Sep 30 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
Feb 13 PHP
php提示Failed to write session data错误的解决方法
Dec 17 PHP
PHP中FTP相关函数小结
Jul 15 PHP
Yii2实现自定义独立验证器的方法
May 05 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
Mar 02 PHP
PHP调用接口用post方法传送json数据的实例
May 31 PHP
PHP日志LOG类定义与用法示例
Sep 06 PHP
PHP的mysqli_thread_id()函数讲解
Jan 24 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图片的裁剪与缩放生成符合需求的缩略图
2013/01/11 PHP
php中多维数组按指定value排序的实现代码
2014/08/19 PHP
PHP+jquery实时显示网站在线人数的方法
2015/01/04 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
纯CSS打造的导航菜单(附jquery版)
2010/08/07 Javascript
js 静态动态成员 and 信息的封装和隐藏
2011/05/29 Javascript
JavaScript实现的简单幂函数实例
2015/04/17 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
JavaScript通过代码调用Flash显示的方法
2016/02/02 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
2016/08/25 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
nodejs搭建本地服务器轻松解决跨域问题
2018/03/21 NodeJs
Vue加载json文件的方法简单示例
2019/01/28 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
详解vue 不同环境配置不同的打包命令
2019/04/07 Javascript
详解vue微信网页授权最终解决方案
2019/06/16 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
[53:49]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
python购物车程序简单代码
2018/04/18 Python
PyQt5每天必学之创建窗口居中效果
2018/04/19 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
2018/05/05 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
小程序canvas中文字设置居中锚点
2019/04/16 HTML / CSS
美国电视购物HSN官网:HSN
2016/09/07 全球购物
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
描述RIP和OSPF区别以及特点
2015/01/17 面试题
《千年梦圆在今朝》教学反思
2014/02/24 职场文书
党员干部公开承诺书
2014/03/26 职场文书
公开服务承诺制度
2014/03/26 职场文书
幼儿园开学寄语
2014/04/03 职场文书
初中三好学生自我鉴定
2014/04/07 职场文书
青年文明号汇报材料
2014/12/23 职场文书