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 相关文章推荐
解决GD中文乱码问题
Feb 14 PHP
php 仿Comsenz安装效果代码打包提供下载
May 09 PHP
PHP操作MongoDB时的整数问题及对策说明
May 02 PHP
PHP网站备份程序代码分享
Jun 10 PHP
phpExcel导出大量数据出现内存溢出错误的解决方法
Feb 28 PHP
解析thinkphp中的M()与D()方法的区别
Jun 22 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
Nov 26 PHP
PHP5各个版本的新功能和新特性总结
Mar 16 PHP
老版本PHP转义Json里的特殊字符的函数
Jun 08 PHP
php+ajax实现无刷新数据分页的办法
Nov 02 PHP
大家都应该掌握的PHP关联数组使用技巧
Dec 25 PHP
php文档工具PHP Documentor安装与使用方法
Jan 25 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中的日期及时间
2006/11/23 PHP
php Notice: Undefined index 错误提示解决方法
2010/08/29 PHP
ThinkPHP3.1查询语言详解
2014/06/19 PHP
初识ThinkPHP控制器
2016/04/07 PHP
php实现登陆模块功能示例
2016/10/20 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
js window.print实现打印特定控件或内容
2013/09/16 Javascript
JavaScript 学习笔记之操作符
2015/01/14 Javascript
javascript强制点击广告的方法
2015/02/06 Javascript
jQuery 跨域访问解决原理案例详解
2016/07/09 Javascript
ES6入门教程之Class和Module详解
2017/05/17 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
angular项目中bootstrap-datetimepicker时间插件的使用示例
2018/03/15 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
js正则取值的结果数组调试方法
2018/10/10 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
2018/12/20 Javascript
命令行批量截图Node脚本示例代码
2019/01/25 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
小米5s微信跳一跳小程序python源码
2018/01/08 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
python实现共轭梯度法
2019/07/03 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
Python容器类型公共方法总结
2020/08/19 Python
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
英国航空官网:British Airways
2016/09/11 全球购物
趣天网日本站:Qoo10 JP
2019/09/18 全球购物
保加利亚手表、香水、化妆品和珠宝购物网站:Brasty.bg
2020/04/22 全球购物
文明村创建实施方案
2014/03/27 职场文书
2015年企业工作总结范文
2015/04/28 职场文书
感恩教师节主题班会
2015/08/12 职场文书
实用求职信模板范文
2019/05/13 职场文书
导游词创作书写原则以及开场白技巧怎么学?
2019/09/25 职场文书