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+DBM的同学录程序(1)
Oct 09 PHP
PHP开发入门教程之面向对象
Dec 05 PHP
php sprintf()函数让你的sql操作更安全
Jul 23 PHP
PHP 缓存实现代码及详细注释
May 16 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
Nov 06 PHP
php使用fputcsv()函数csv文件读写数据的方法
Jan 06 PHP
php简单实现屏蔽指定ip段用户的访问
Apr 29 PHP
PHP Yii框架之表单验证规则大全
Nov 16 PHP
Ajax请求PHP后台接口返回信息的实例代码
Aug 21 PHP
PHP与SQL语句写一句话木马总结
Oct 11 PHP
如何通过Apache在本地配置多个虚拟主机
Jul 29 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模板页面中分页代码的解析
2009/02/06 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
2011/06/06 PHP
php session 写入数据库
2016/02/13 PHP
Yii统计不同类型邮箱数量的方法
2016/10/18 PHP
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
javascript innerHTML使用分析
2010/12/03 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
基于javascript实现图片预加载
2016/01/05 Javascript
微信小程序 五星评分的实现实例
2017/08/04 Javascript
jQuery EasyUI 选项卡面板tabs的使用实例讲解
2017/12/25 jQuery
详解webpack-dev-server 设置反向代理解决跨域问题
2018/04/18 Javascript
解决JavaScript layui 下拉框不显示的问题
2018/08/14 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
2019/11/25 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
JavaScript 异步时序问题
2020/11/20 Javascript
Python3 翻转二叉树的实现
2019/09/30 Python
使用Python测试Ping主机IP和某端口是否开放的实例
2019/12/17 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
python如何支持并发方法详解
2020/07/25 Python
HTML5逐步分析实现拖放功能的方法
2020/09/30 HTML / CSS
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
北京麒麟网信息技术有限公司网络游戏测试面试题
2013/09/28 面试题
个人简历自我鉴定
2013/10/11 职场文书
高考寄语大全
2014/04/08 职场文书
《北大荒的秋天》教学反思
2014/04/14 职场文书
服装设计专业自荐信
2014/06/17 职场文书
升学宴答谢词
2015/01/05 职场文书
学校2015年纠风工作总结
2015/05/15 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书
运动会加油稿
2015/07/22 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书
Python基础知识之变量的详解
2021/04/14 Python
5种方法告诉你如何使JavaScript 代码库更干净
2021/09/15 Javascript