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动态生成虚拟现实VRML网页
Oct 09 PHP
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
May 03 PHP
兼容PHP5的PHP目录管理函数库
Jul 10 PHP
DedeCMS dede_channeltype表字段注释
Apr 07 PHP
php中var_export与var_dump的区别分析
Aug 21 PHP
重新封装zend_soap实现http连接安全认证的php代码
Jan 12 PHP
解析PHP计算页面执行时间的实现代码
Jun 18 PHP
php 多文件上传的实现实例
Oct 23 PHP
php实现微信公众号创建自定义菜单功能的实例代码
Jun 11 PHP
解决laravel资源加载路径设置的问题
Oct 14 PHP
laravel5.1 ajax post 传值_token示例
Oct 24 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 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
几种显示数据的方法的比较
2006/10/09 PHP
php intval的测试代码发现问题
2008/07/27 PHP
php 全局变量范围分析
2009/08/07 PHP
PHP冒泡排序算法代码详细解读
2011/07/17 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
PHP date函数常用时间处理方法
2015/05/11 PHP
JavaScript 未结束的字符串常量常见解决方法
2010/01/24 Javascript
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
简易js代码实现计算器操作
2013/04/15 Javascript
Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
2013/07/17 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
vue小白入门教程
2018/04/02 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
python结合API实现即时天气信息
2016/01/19 Python
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
python对于requests的封装方法详解
2019/01/03 Python
Python3.5迭代器与生成器用法实例分析
2019/04/30 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
新建文件时Pycharm中自动设置头部模板信息的方法
2020/04/17 Python
Mytheresa中国官网:德国时尚奢侈品商城
2017/08/04 全球购物
expedia比利时:预订航班+酒店并省钱
2018/07/13 全球购物
金士达面试非笔试
2012/03/14 面试题
夜班门卫岗位职责
2013/12/09 职场文书
离婚协议书怎么写
2014/09/12 职场文书
应届生求职自荐信范文
2015/03/04 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技
python中 .npy文件的读写操作实例
2022/04/14 Python
GTX1660显卡搭配显示器推荐
2022/04/19 数码科技
win11开机发生死循环重启怎么办?win11开机发生死循环重启解决方法
2022/08/05 数码科技