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开发者事半功倍的十大技巧小结
Apr 20 PHP
PHP-redis中文文档介绍
Feb 07 PHP
php 字符串压缩方法比较示例
Jan 23 PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 PHP
PHP多态代码实例
Jun 26 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
Nov 12 PHP
php中通用的excel导出方法实例
Dec 30 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
PHP levenshtein()函数用法讲解
Mar 08 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
Oct 13 PHP
PHP7 新增常量
Mar 09 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
地摊中国 - 珍藏老照片
2020/08/18 杂记
php学习之运算符相关概念
2011/06/09 PHP
PHP缓存技术的使用说明
2011/08/06 PHP
php中heredoc与nowdoc介绍
2014/12/25 PHP
PHP 实现类似js中alert() 提示框
2015/03/18 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
2015/10/22 PHP
详解PHP对象的串行化与反串行化
2016/01/24 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
js实现iframe动态调整高度的代码
2008/01/06 Javascript
javascript 动态加载 css 方法总结
2009/07/11 Javascript
file模式访问网页时iframe高度自适应解决方案
2013/01/16 Javascript
js简单实现用户注册信息的校验代码
2013/11/15 Javascript
jquery图片播放浏览插件prettyPhoto使用详解
2014/12/19 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
js选项卡的实现方法
2015/02/09 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
2015/06/01 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
去除字符串左右两边的空格(实现代码)
2016/05/12 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
VUE长按事件需求详解
2017/10/18 Javascript
Vue2.x Todo之自定义指令实现自动聚焦的方法
2019/01/08 Javascript
基于python的汉字转GBK码实现代码
2012/02/19 Python
python使用PyGame播放Midi和Mp3文件的方法
2015/04/24 Python
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
Python变量和数据类型详解
2017/02/15 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
python批量下载网站马拉松照片的完整步骤
2018/12/05 Python
python的常见矩阵运算(小结)
2019/08/07 Python
关于十八大的演讲稿
2014/09/15 职场文书
安全教育培训心得体会
2016/01/15 职场文书
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS
用php如何解决大文件分片上传问题
2021/07/07 PHP