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的计数器程序
Oct 09 PHP
一个PHP+MSSQL分页的例子
Oct 09 PHP
php smarty截取中文字符乱码问题?gb2312/utf-8
Nov 07 PHP
php页面防重复提交方法总结
Nov 25 PHP
WordPress自定义时间显示格式
Mar 27 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
PHP实现负载均衡下的session共用功能
Apr 17 PHP
PHP连接sftp并下载文件的方法教程
Aug 26 PHP
CI框架附属类用法分析
Dec 26 PHP
浅谈PHP各环境下的伪静态配置
Mar 13 PHP
PHP封装请求类实例分析【基于Yii框架】
Oct 17 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 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
2个Codeigniter文件批量上传控制器写法例子
2014/07/25 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
比较完整的微信开发php代码
2016/08/02 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
如何用PHP做到页面注册审核
2017/03/02 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
2019/03/22 PHP
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
深入浅析jQuery对象$.html
2016/08/22 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
vue2.0全局组件之pdf详解
2017/06/26 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
pageGroup.js实现分页功能
2019/07/27 Javascript
Vue 使用beforeEach实现登录状态检查功能
2019/10/31 Javascript
jQuery 淡入/淡出效果函数用法分析
2020/05/19 jQuery
[42:50]NB vs VP 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python连接池实现示例程序
2013/11/26 Python
Python开发常用的一些开源Package分享
2015/02/14 Python
开源Web应用框架Django图文教程
2017/03/09 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
基于python实现获取网页图片过程解析
2020/05/11 Python
亚马逊印度站:Amazon.in
2017/10/15 全球购物
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
Wallis官网:英国女装零售商
2020/01/21 全球购物
法律专业应届本科毕业生求职信
2013/10/25 职场文书
大学生入党思想汇报
2014/01/01 职场文书
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
人事行政助理岗位职责
2015/04/11 职场文书
为什么在foreach循环中JAVA集合不能添加或删除元素
2021/06/11 Java/Android
MySQL索引是啥?不懂就问
2021/07/21 MySQL
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
2022/08/05 Java/Android