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&amp;&amp;mysql)二
Oct 09 PHP
php md5下16位和32位的实现代码
Apr 09 PHP
PHP 一个比较完善的简单文件上传
Mar 25 PHP
php设计模式 Chain Of Responsibility (职责链模式)
Jun 26 PHP
php中防止恶意刷新页面的代码小结
Oct 31 PHP
ThinkPHP3.1新特性之字段合法性检测详解
Jun 19 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
php三种实现多线程类似的方法
Oct 30 PHP
php下载文件,添加响应头的简单实例
Sep 22 PHP
Smarty3配置及入门语法
Feb 22 PHP
PHP实现 APP端微信支付功能
Jun 22 PHP
在PHP中输出JS语句以及乱码问题的解决方案
Feb 13 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
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
php生成图形(Libchart)实例
2013/11/06 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
基于jQuery的js分页代码
2010/06/10 Javascript
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
JS实现的页面自定义滚动条效果
2015/10/26 Javascript
javascript检测移动设备横竖屏
2016/05/21 Javascript
Node.js如何自动审核团队的代码
2016/07/20 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
基于jquery实现多级菜单效果
2017/07/25 jQuery
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
详解Vue前端生产环境发布配置实战篇
2019/05/07 Javascript
简单了解小程序+node梳理登陆流程
2019/06/24 Javascript
我所理解的JavaScript中的this指向
2020/09/04 Javascript
Python和perl实现批量对目录下电子书文件重命名的代码分享
2014/11/21 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
详解python中的hashlib模块的使用
2019/04/22 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
2019/08/10 Python
Python的赋值、深拷贝与浅拷贝的区别详解
2020/02/12 Python
python实现简单颜色识别程序
2020/02/19 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
英国工具中心:UK Tool Centre
2017/07/10 全球购物
C#面试题问题集
2016/04/02 面试题
关于工资低的辞职信
2014/01/14 职场文书
《影子》教学反思
2014/02/21 职场文书
软件项目开发计划书
2014/05/01 职场文书
节约用电标语
2014/06/17 职场文书
车辆年检委托书范本
2014/10/14 职场文书
优秀教研组申报材料
2014/12/26 职场文书
团代会开幕词
2015/01/28 职场文书
2015年教师节新闻稿
2015/07/17 职场文书
品牌形象定位,全面分析
2019/07/23 职场文书