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 相关文章推荐
风格模板初级不完全修改教程
Oct 09 PHP
PHP4与PHP3中一个不兼容问题的解决方法
Oct 09 PHP
模板引擎正则表达式调试小技巧
Jul 20 PHP
深入解析php之sphinx
May 15 PHP
浅析THINKPHP的addAll支持的最大数据量
Feb 03 PHP
php动态生成缩略图并输出显示的方法
Apr 20 PHP
YII Framework框架教程之缓存用法详解
Mar 14 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
Aug 17 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
Jan 24 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
Jun 12 PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
Sep 17 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
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
Extjs4 Treegrid 使用心得分享(经验篇)
2013/07/01 Javascript
JavaScript prototype 使用介绍
2013/08/29 Javascript
Jquery AJAX POST与GET之间的区别
2013/11/14 Javascript
JS实现定时自动关闭DIV层提示框的方法
2015/05/11 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
js图片上传前预览功能(兼容所有浏览器)
2016/08/24 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
js实现对table的增加行和删除行的操作方法
2016/10/13 Javascript
纯原生js实现table表格的增删
2017/01/05 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
解决vue 表格table列求和的问题
2019/11/06 Javascript
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python求算数平方根和约数的方法汇总
2016/03/09 Python
python的Tqdm模块的使用
2018/01/10 Python
python根据unicode判断语言类型实例代码
2018/01/17 Python
python 读写文件,按行修改文件的方法
2018/07/12 Python
Python Django框架防御CSRF攻击的方法分析
2019/10/18 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
2020/03/10 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
html5的localstorage详解
2017/05/09 HTML / CSS
Ted Baker英国官网:男士和女士服装及配件
2017/03/13 全球购物
白俄罗斯大卖场:21vek.by
2019/07/25 全球购物
大学生求职推荐信
2013/11/27 职场文书
怎么写工作检讨书
2014/11/16 职场文书
计算机实训心得体会
2016/01/14 职场文书
手把手教你制定暑期学习计划,让你度过充实的暑假
2019/08/22 职场文书
关于springboot配置druid数据源不生效问题(踩坑记)
2021/09/25 Java/Android