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自定义函数call_user_func和call_user_func_array详解
Jul 14 PHP
php中将数组存到文件里的实现代码
Jan 19 PHP
带密匙的php加密解密示例分享
Jan 29 PHP
PHP连接MySQL的2种方法小结以及防止乱码
Mar 11 PHP
destoon常用的安全设置概述
Jun 21 PHP
php中的字符编码转换函数用法示例
Oct 20 PHP
php 截取utf-8格式的字符串实例代码
Oct 30 PHP
php插入含有特殊符号数据的处理方法
Nov 24 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
May 30 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 PHP
php慢查询日志和错误日志使用详解
Feb 27 PHP
PHP实现爬虫爬取图片代码实例
Mar 03 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 split汉字
2009/06/05 PHP
yii2中使用Active Record模式的方法
2016/01/09 PHP
浅析Yii2 GridView实现下拉搜索教程
2016/04/22 PHP
JS OOP包机制,类创建的方法定义
2009/11/02 Javascript
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
javascript 函数声明与函数表达式的区别介绍
2013/10/05 Javascript
60个很实用的jQuery代码开发技巧收集
2014/12/15 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
2015/12/08 Javascript
创建一般js对象的几种方式
2017/01/19 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
微信小程序之滚动视图容器的实现方法
2017/09/26 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
微信小程序实现跳转的几种方式总结(推荐)
2019/04/24 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
Python基础之getpass模块详细介绍
2017/08/10 Python
基于python时间处理方法(详解)
2017/08/14 Python
python中文分词教程之前向最大正向匹配算法详解
2017/11/02 Python
python计算两个地址之间的距离方法
2018/06/09 Python
python二进制文件的转译详解
2019/07/03 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
Pycharm修改python路径过程图解
2020/05/22 Python
Python3爬虫中Splash的知识总结
2020/07/10 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
Python-split()函数实例用法讲解
2020/12/18 Python
Python运算符+与+=的方法实例
2021/02/18 Python
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
Omio俄罗斯:一次搜索公共汽车、火车和飞机的机票
2018/11/17 全球购物
企业总经理岗位职责
2014/02/13 职场文书
安全目标管理责任书
2014/07/25 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
opencv读取视频并保存图像的方法
2021/06/04 Python