PHP mcrypt可逆加密算法分析


Posted in PHP onJuly 19, 2011

数据加密在我们生活中的地位已经越来越重要了,尤其是考虑到在网络上发生的大量交易和传输的大量数据。对于不需要还原为原始数据的信息我们可以使用MD5、sha1等不可逆加密算法对数据进行加密处理,但对于交易信息等需要还原为原始数据的重要信息则必须使用可还原的加密算法进行加密了。当然你可以自己写一个可逆加密的算法进行加密和解密计算。本文中我们介绍的是使用 mcrypt模块进行加密解密操作。
Mcrypt的优点不仅仅在于其提供的加密算法较多,在windows下随PHP包一起发布,还在于它可以对数据进行加/解密处理,此外,它还提供了包括DES算法在内的35种处理数据用的函数。

/** 
+----------------------------------------------------- 
* Mcrypt 加密/解密 
* @param String $date 要加密和解密的数据 
* @param String $mode encode 默认为加密/decode 为解密 
* @return String 
* @author zxing@97md.net Mon Sep 14 22:59:28 CST 2009 
+----------------------------------------------------- 
* @example 
*/ 
function ZxingCrypt($date,$mode = 'encode'){ 
$key = md5('zxing');//用MD5哈希生成一个密钥,注意加密和解密的密钥必须统一 
if ($mode == 'decode'){ 
$date = base64_decode($date); 
} 
if (function_exists('mcrypt_create_iv')){ 
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
} 
if (isset($iv) && $mode == 'encode'){ 
$passcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $date, MCRYPT_MODE_ECB, $iv); 
}elseif (isset($iv) && $mode == 'decode'){ 
$passcrypt = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $date, MCRYPT_MODE_ECB, $iv); 
} 
if ($mode == 'encode'){ 
$passcrypt = base64_encode($passcrypt); 
} 
return $passcrypt; 
}

别的网友的代码
<?php 
$td = mcrypt_module_open(MCRYPT_DES,'','ecb',''); //使用MCRYPT_DES算法,ecb模式 
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); 
$ks = mcrypt_enc_get_key_size($td); 
$key = "ery secret key";//密钥 
$key = substr(md5($key), 0, $ks); 
mcrypt_generic_init($td, $key, $iv); //初始处理 
//加密 
$encrypted = mcrypt_generic($td, 'This is very important data'); 
//结束处理 
mcrypt_generic_deinit($td); 
//初始解密处理 
mcrypt_generic_init($td, $key, $iv); 
//解密 
$decrypted = mdecrypt_generic($td, $encrypted); 
//结束 
mcrypt_generic_deinit($td); 
mcrypt_module_close($td); 
//解密后,可能会有后续的\0,需去掉 
echo trim($decrypted) . "\n"; 
?>
PHP 相关文章推荐
PHP脚本数据库功能详解(中)
Oct 09 PHP
MYSQL 小技巧 -- LAST_INSERT_ID
Nov 24 PHP
国外比较好的几个的Php开源建站平台小结
Apr 22 PHP
PHP include_path设置技巧分享
Jul 03 PHP
探讨捕获php错误信息方法的详解
Jun 09 PHP
PHP利用REFERER根居访问来地址进行页面跳转
Sep 28 PHP
php网页标题中文乱码的有效解决方法
Mar 05 PHP
微信公众平台天气预报功能开发
Jul 06 PHP
IIS下PHP的三种配置方式对比
Nov 20 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
May 05 PHP
Laravel框架实现的使用smtp发送邮件功能示例
Mar 12 PHP
php利用ZipArchive类操作文件的实例
Jan 21 PHP
PHP中date()日期函数有关参数整理
Jul 19 #PHP
php URL验证正则表达式
Jul 19 #PHP
PHP中static关键字原理的学习研究分析
Jul 18 #PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
Jul 18 #PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
Jul 18 #PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
Jul 18 #PHP
PHP中英混合字符串截取函数代码
Jul 17 #PHP
You might like
自己做矿石收音机
2021/03/02 无线电
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
深入PHP许愿墙模块功能分析
2013/06/25 PHP
PHP和Mysql中转UTF8编码问题汇总
2015/10/10 PHP
Yii2.0预定义的别名功能小结
2016/07/04 PHP
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
Jquery异步提交表单代码分享
2015/03/26 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
JavaScript代码性能优化总结(推荐)
2016/05/16 Javascript
论Bootstrap3和Foundation5网格系统的异同
2016/05/16 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
vue.js开发环境搭建教程
2017/05/04 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
vue实现的网易云音乐在线播放和下载功能案例
2019/02/18 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
为react组件库添加typescript类型提示的方法
2020/06/15 Javascript
在vue中使用Base64转码的案例
2020/08/07 Javascript
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
浅谈python中的面向对象和类的基本语法
2016/06/13 Python
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
Python中list查询及所需时间计算操作示例
2018/06/21 Python
python使用PIL给图片添加文字生成海报示例
2018/08/17 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
python爬取盘搜的有效链接实现代码
2019/07/20 Python
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
Subside Sports德国:足球球衣和球迷商品
2019/06/08 全球购物
意大利运动服减价商店:ScontoSport
2020/03/10 全球购物
黄继光的英雄事迹材料
2014/02/13 职场文书
副科级后备干部考察材料
2014/05/15 职场文书
党建工作经验交流材料
2014/05/25 职场文书
淘宝客服工作职责
2014/07/11 职场文书
党委领导班子整改方案
2014/09/30 职场文书