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 MsSql server时遇到的中文编码问题
Jun 11 PHP
学习discuz php 引入文件的方法DISCUZ_ROOT
Jun 21 PHP
php+js实现图片的上传、裁剪、预览、提交示例
Aug 27 PHP
PHP依赖倒置(Dependency Injection)代码实例
Oct 11 PHP
php+ajax制作无刷新留言板
Oct 27 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
深入理解PHP JSON数组与对象
Jul 19 PHP
Zend Framework路由器用法实例详解
Dec 11 PHP
ThinkPHP实现分页功能
Apr 28 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
May 02 PHP
php中try catch捕获异常实例详解
Aug 06 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 接口类与抽象类的实际作用
2009/11/26 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
php正则表达式(regar expression)
2011/09/10 PHP
解析php中获取url与物理路径的总结
2013/06/21 PHP
解析php session_set_save_handler 函数的用法(mysql)
2013/06/29 PHP
mysql_escape_string()函数用法分析
2016/04/25 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
用javascript实现给图片加链接
2007/08/15 Javascript
javascript 页面只自动刷新一次
2009/07/10 Javascript
jquery实现marquee效果(文字或者图片的水平垂直滚动)
2013/01/07 Javascript
使用AngularJS 应用访问 Android 手机的图片库
2015/03/24 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
微信小程序 空白页重定向解决办法
2017/06/27 Javascript
backbone简介_动力节点Java学院整理
2017/07/14 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
2017/08/09 jQuery
vue实现长图垂直居上 vue实现短图垂直居中
2017/10/18 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
2018/08/22 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
微信小程序实现的canvas合成图片功能示例
2019/05/03 Javascript
Python 字典dict使用介绍
2014/11/30 Python
Flask-WTF表单的使用方法
2019/07/12 Python
Python中的self用法详解
2019/08/06 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
2020/03/09 Python
pycharm sciview的图片另存为操作
2020/06/01 Python
python使用matplotlib:subplot绘制多个子图的示例
2020/09/24 Python
美国体育用品商店:Rally House(NCAA、NFL、MLB、NBA、NHL和MLS)
2018/01/03 全球购物
C语言如何决定使用那种整数类型
2016/11/26 面试题
为什么需要版本控制?
2013/08/08 面试题
转让协议书
2015/01/27 职场文书
2015世界地球日活动总结
2015/02/09 职场文书
Python中glob库实现文件名的匹配
2021/06/18 Python
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL