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 相关文章推荐
PHP4 与 MySQL 数据库操作函数详解
Oct 09 PHP
ADODB结合SMARTY使用~超级强
Nov 25 PHP
php格式化工具Beautify PHP小小BUG
Apr 24 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
May 07 PHP
php文档更新介绍
Jul 22 PHP
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
Sep 19 PHP
PHP入门之常量简介和系统常量
May 12 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
如何用PHP来实现一个动态Web服务器
Jul 29 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
Dec 06 PHP
Yii框架ACF(accessController)简单权限控制操作示例
Apr 26 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
Aug 06 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 反向排序和随机排序代码
2010/06/30 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
js 判断checkbox是否选中的操作方法
2012/11/09 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
JavaScript中的substr()方法使用详解
2015/06/06 Javascript
nodejs爬虫抓取数据之编码问题
2015/07/03 NodeJs
JavaScript判断DIV内容是否为空的方法
2016/01/29 Javascript
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
Python中条件选择和循环语句使用方法介绍
2013/03/13 Python
python操作摄像头截图实现远程监控的例子
2014/03/25 Python
Python字符串格式化的方法(两种)
2017/09/19 Python
django 解决manage.py migrate无效的问题
2018/05/27 Python
Python数据持久化shelve模块用法分析
2018/06/29 Python
Python使用sax模块解析XML文件示例
2019/04/04 Python
详解用Python为直方图绘制拟合曲线的两种方法
2019/08/21 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
Python SSL证书验证问题解决方案
2020/01/13 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
通信研究生自荐信
2014/02/01 职场文书
销售人员求职信
2014/07/22 职场文书
授权委托书怎么写
2014/09/25 职场文书
企业法人代表授权委托书
2014/10/02 职场文书
担保书范本
2015/01/20 职场文书
离婚答辩状范文
2015/05/22 职场文书
董存瑞观后感
2015/06/11 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js
box-shadow单边阴影的实现
2023/05/21 HTML / CSS