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 相关文章推荐
ASP知识讲座四
Oct 09 PHP
php.ini 中文版
Oct 28 PHP
PHP4和PHP5性能测试和对比 测试代码与环境
Aug 17 PHP
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
Dec 06 PHP
PHP获取数组中某元素的位置及array_keys函数应用
Jan 29 PHP
解析CI的AJAX分页 另类实现方法
Jun 27 PHP
CodeIgniter CLI模式简介
Jun 17 PHP
PHP封装的Twitter访问类实例
Jul 18 PHP
php基于数组函数实现关联表的编辑操作示例
Jul 04 PHP
PHP实现模拟http请求的方法分析
Dec 20 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
Apr 04 PHP
PHP+redis实现微博的推模型案例分析
Jul 10 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
Memcache 在PHP中的使用技巧
2010/02/08 PHP
php数据库密码的找回的步骤
2011/01/12 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
PHP curl 并发最佳实践代码分享
2012/09/05 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
PHP Cli 模式设置进程名称的方法
2019/06/12 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
javascript下查找父节点的简单方法
2007/08/13 Javascript
Extjs列表详细信息窗口新建后自动加载解决方法
2010/04/02 Javascript
javascript对talbe进行动态添加、删除、验证实现代码
2012/03/29 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
JS将秒换成时分秒实现代码
2013/09/03 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
jQuery的观察者模式详解
2014/12/22 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
2017/02/17 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
JS面试题大坑之隐式类型转换实例代码
2018/10/14 Javascript
JAVA面试题 static关键字详解
2019/07/16 Javascript
vue.js实现照片放大功能
2020/06/23 Javascript
详解django中Template语言
2020/02/22 Python
简单了解django处理跨域请求最佳解决方案
2020/03/25 Python
python退出循环的方法
2020/06/18 Python
python利用线程实现多任务
2020/09/18 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
Nike瑞典官方网站:Nike.com (SE)
2018/11/26 全球购物
普通院校学生的自荐信
2013/11/27 职场文书
咖啡厅创业计划书范本
2014/01/22 职场文书
2014年教师政治学习材料
2014/06/02 职场文书
森林防火标语
2014/06/23 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
先进工作者推荐材料
2014/12/23 职场文书
逃课检讨书范文
2015/05/06 职场文书
党员干部学习三严三实心得体会
2016/01/05 职场文书
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python