PHP加密扩展库Mcrypt安装和实例


Posted in PHP onNovember 10, 2013

mcrypt简单介绍
PHP程序员们在编写代码程序时,除了要保证代码的高性能之外,还有一点是非常重要的,那就是程序的安全性保障。PHP除了自带的几种加密函数外,还有功能更全面的PHP加密扩展库Mcrypt和Mhash。
其中,Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以密文还原。
mcrypt 是 php 里面重要的加密支持扩展库,linux环境下:该库在默认情况下不开启。window环境下:PHP>=5.3,默认开启mcrypt扩展。
1、Mcrypt()库的安装
mcypt是一个功能十分强大的加密算法扩展库。在标准的PHP安装过程中并没有把Mcrypt安装上,但PHP的主目录下包含了libmcrypt.dll文件,所以我们只用将PHP配置文件中的这行:extension=php_mcrypt.dll前面的分号去掉,然后重启服务器就可以使用这个扩展库了。
支持的算法和加密模式
Mcrypt库支持20多种加密算法和8种加密模式,具体可以通过函数mcrypt_list_algorithms()和mcrypt_list_modes()来显示[1]加密算法
Mcrypt支持的算法有:
cast-128
gost
rijndael-128
twofish
arcfour
cast-256
loki97
rijndael-192
saferplus
wake
blowfish-compat
des
rijndael-256
serpent
xtea
blowfish
enigma
rc2
tripledes
加密模式
Mcrypt支持的加密模式有:
cbc
cfb
ctr
ecb
ncfb
nofb
ofb
stream
这些算法和模式在应用中要以常量来表示,写的时候加上前缀MCRYPT_和MCRYPT_来表示,如下面Mcrypt应用的

例子

DES算法表示为MCRYPT_DES;
ECB模式表示为MCRYPT_MODE_ECB;

<?php
$str = "我的名字是?一般人我不告诉他!"; //加密内容
$key = "key:111"; //密钥
$cipher = MCRYPT_DES; //密码类型
$modes = MCRYPT_MODE_ECB; //密码模式
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$modes),MCRYPT_RAND);//初始化向量
echo "加密明文:".$str."<p>";
$str_encrypt = mcrypt_encrypt($cipher,$key,$str,$modes,$iv); //加密函数
echo "加密密文:".$str_encrypt." <p>";
$str_decrypt = mcrypt_decrypt($cipher,$key,$str_encrypt,$modes,$iv); //解密函数
echo "还原:".$str_decrypt;
?>
 

运行结果:
加密明文:我的名字是?一般人我不告诉他!
加密密文: 锍??]??q???L 笑 ??"? ?
还原:我的名字是?一般人我不告诉他!
<1>由例子中可看到,使用PHP加密扩展库Mcrypt对数据加密和解密之前,首先创建了一个初始化向量,简称为iv。由 $iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$modes),MCRYPT_RAND);可见创建初始化向 量需要两个参数:size指定了iv的大小;source为iv的源,其中值MCRYPT_RAND为系统随机数。
<2>函数mcrypt_get_iv_size($cipher,$modes)返回初始化向量大小,参数cipher和mode分别指算法和加 密模式。
<3>加密函数$str_encrypt = mcrypt_encrypt($cipher,$key,$str,$modes,$iv); 该函数的5个参数分 别如下:cipher——加密算法、key——密钥、data(str)——需要加密的数据、mode——算法模式、 iv——初始化向量
<4>解密函数 mcrypt_decrypt($cipher,$key,$str_encrypt,$modes,$iv); 该函数和加密函数的参数几乎 一样,唯一不同的是data,也就是说data为需要解密的数据$str_encrypt,而不是原始数据$str。
注:加密和解密函数中的参数cipher、key和mode必须一一对应,否则数据不能被还原

总结
mcrypt库常量
Mcrypt库支持20多种加密算法和8种加密模式。可以通过函数mcrypt_list_algorithms()和mcrypt_list_modes()来查看。

PHP 相关文章推荐
php smarty的预保留变量总结
Dec 04 PHP
一贴学会PHP 新手入门教程
Aug 03 PHP
php查询mssql出现乱码的解决方法
Dec 29 PHP
PHP获取文件行数的方法
Jun 10 PHP
非常实用的php验证码类
May 15 PHP
PHP中CheckBox多选框上传失败的代码写法
Feb 13 PHP
php解析mht文件转换成html的实例
Mar 13 PHP
php简单构造json多维数组的方法示例
Jun 08 PHP
使用 laravel sms 构建短信验证码发送校验功能
Nov 06 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
Oct 16 PHP
Laravel框架搜索分页功能示例
Feb 01 PHP
thinkPHP和onethink微信支付插件分享
Aug 11 PHP
php中autoload的用法总结
Nov 08 #PHP
PHP用身份证号获取星座和生肖的方法
Nov 07 #PHP
php旋转图片90度的方法
Nov 07 #PHP
提高PHP编程效率的方法
Nov 07 #PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 #PHP
php获取汉字首字母的函数
Nov 07 #PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
Nov 07 #PHP
You might like
PHP脚本的10个技巧(4)
2006/10/09 PHP
PHP中的类-什么叫类
2006/11/20 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
php图像处理类实例
2015/07/28 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
实例讲解通过​PHP创建数据库
2019/01/20 PHP
用js实现手把手教你月入万刀(转贴)
2007/11/07 Javascript
用JS写的一个TableView控件代码
2010/01/23 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
jquery实现顶部向右伸缩的导航区域代码
2015/09/02 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
2016/08/20 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
[54:51]Ti4 冒泡赛第二轮LGD vs C9 3
2014/07/14 DOTA
python基础教程之类class定义使用方法
2014/02/20 Python
python编程实现归并排序
2017/04/14 Python
python爬虫_实现校园网自动重连脚本的教程
2018/04/22 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
DES加密解密算法之python实现版(图文并茂)
2018/12/06 Python
python给图像加上mask,并提取mask区域实例
2020/01/19 Python
python使用requests库爬取拉勾网招聘信息的实现
2020/11/20 Python
美国嘻哈文化生活方式品牌:GLD
2018/04/15 全球购物
教育系毕业生中文求职信范文
2013/10/06 职场文书
毕业生简单求职信
2013/11/19 职场文书
工作人员思想汇报
2014/01/09 职场文书
中学校庆方案
2014/03/17 职场文书
个人公开承诺书
2014/03/28 职场文书
劳动竞赛口号
2014/06/16 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
2014年管理工作总结
2014/11/22 职场文书
2015年乡镇人大工作总结
2015/04/22 职场文书
2016入党积极分子党课培训心得体会
2016/01/06 职场文书
Java实现简易的分词器功能
2021/06/15 Java/Android
python数据处理之Pandas类型转换
2022/04/28 Python