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+oracle 分页类
Oct 09 PHP
利用PHP和AJAX创建RSS聚合器的代码
Mar 13 PHP
php设计模式 Facade(外观模式)
Jun 26 PHP
php语言流程控制中的主动与被动
Nov 05 PHP
phpize的深入理解
Jun 03 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
Jun 23 PHP
php简单实现多字节字符串翻转的方法
Mar 31 PHP
THINKPHP截取中文字符串函数实例代码
Mar 20 PHP
Redis构建分布式锁
Mar 28 PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 PHP
laravel框架使用阿里云短信发送消息操作示例
Feb 15 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 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
一个程序下载的管理程序(四)
2006/10/09 PHP
php Undefined index的问题
2009/06/01 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
2010/06/04 PHP
php5.5中类级别的常量使用介绍
2013/10/02 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
PHP实现微信退款功能
2018/10/02 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
jquery 笔记 事件
2011/11/02 Javascript
javascript中xml操作实现代码
2011/11/21 Javascript
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
基于jQuery选择器的整理集合
2013/04/26 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
2013/06/04 Javascript
复选框全选与全不选操作实现思路
2013/08/18 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
ECMAScript6--解构
2017/03/30 Javascript
webpack 模块热替换原理
2018/04/09 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
js最实用string(字符串)类型的使用及截取与拼接详解
2019/04/26 Javascript
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
Pytorch之parameters的使用
2019/12/31 Python
python实现删除列表中某个元素的3种方法
2020/01/15 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
Python json格式化打印实现过程解析
2020/07/21 Python
基于CSS3实现的黑色个性导航菜单效果
2015/09/14 HTML / CSS
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
Chemist Warehouse官方海外旗舰店:澳洲第一连锁大药房
2017/08/25 全球购物
农行实习自我鉴定
2013/09/22 职场文书
合伙经营协议书范本
2014/09/13 职场文书
2016年主题党日活动总结
2016/04/05 职场文书
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android
sql server删除前1000行数据的方法实例
2021/08/30 SQL Server