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 相关文章推荐
模拟OICQ的实现思路和核心程序(一)
Oct 09 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
Jul 13 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 PHP
php绘制一条弧线的方法
Jan 24 PHP
smarty模板引擎之内建函数用法
Mar 30 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
Jul 02 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
Feb 04 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
Apr 26 PHP
在laravel中使用Symfony的Crawler组件分析HTML
Jun 19 PHP
windows环境下使用Composer安装ThinkPHP5
May 18 PHP
PHP数组基本用法与知识点总结
Jun 02 PHP
PHP内存溢出优化代码详解
Feb 26 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 url地址栏传中文乱码解决方法集合
2010/06/25 PHP
ecshop实现smtp发送邮件
2015/02/03 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
基于Swoole实现PHP与websocket聊天室
2016/08/03 PHP
实例讲解PHP中使用命名空间
2019/01/27 PHP
PHP session垃圾回收机制实例分析
2019/06/28 PHP
Save a File Using a File Save Dialog Box
2007/06/18 Javascript
js 幻灯片的实现
2011/12/06 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
javascript运动详解
2015/07/06 Javascript
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
旺旺在线客服代码 旺旺客服代码生成器
2018/01/09 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
2020/03/06 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
CSS3 3D制作实战案例分析
2016/09/18 HTML / CSS
浙大网新C/C++面试解惑
2015/05/27 面试题
实习自荐信
2013/10/13 职场文书
民政局离婚协议书范本
2014/10/20 职场文书
工程项目经理岗位职责
2015/02/02 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
辣妈辣妹观后感
2015/06/10 职场文书
电影雷锋观后感
2015/06/10 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
超级实用!五步法则,教你写好年终工作总结
2019/12/05 职场文书
Ajax是什么?Ajax高级用法之Axios技术
2021/04/21 Javascript
HTML基础详解(下)
2021/10/16 HTML / CSS
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫