PHP 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)


Posted in PHP onJanuary 30, 2009
// +----------------------------------------------------------------------+ 
// | Willko Framework | 
// +----------------------------------------------------------------------+ 
// | Copyright (c) 2008-2009 Willko Cheng | 
// +----------------------------------------------------------------------+ 
// | Authors: Willko Cheng <willko@foxmail.com> | 
// +----------------------------------------------------------------------+ 
// $string 明文 或 密文 
// $isEncrypt 是否加密 
// $key 密匙 
// 采用SHA1生成密匙簿,超过300个字符使用ZLIB压缩 
function dencrypt($string, $isEncrypt = true, $key = KEY_SPACE) { 
if (!isset($string{0}) || !isset($key{0})) { 
return false; 
} $dynKey = $isEncrypt ? hash('sha1', microtime(true)) : substr($string, 0, 40); 
$fixedKey = hash('sha1', $key); 
$dynKeyPart1 = substr($dynKey, 0, 20); 
$dynKeyPart2 = substr($dynKey, 20); 
$fixedKeyPart1 = substr($fixedKey, 0, 20); 
$fixedKeyPart2 = substr($fixedKey, 20); 
$key = hash('sha1', $dynKeyPart1 . $fixedKeyPart1 . $dynKeyPart2 . $fixedKeyPart2); 
$string = $isEncrypt ? $fixedKeyPart1 . $string . $dynKeyPart2 : (isset($string{339}) ? gzuncompress(base64_decode(substr($string, 40))) : base64_decode(substr($string, 40))); 
$n = 0; 
$result = ''; 
$len = strlen($string); 
for ($n = 0; $n < $len; $n++) { 
$result .= chr(ord($string{$n}) ^ ord($key{$n % 40})); 
} 
return $isEncrypt ? $dynKey . str_replace('=', '', base64_encode($n > 299 ? gzcompress($result) : $result)) : substr($result, 20, -20); 
}
PHP 相关文章推荐
用文本文件制作留言板提示(上)
Oct 09 PHP
php下HTTP Response中的Chunked编码实现方法
Nov 19 PHP
强烈声明: 不要使用(include/require)_once
Jun 06 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
May 10 PHP
php开启与关闭错误提示适用于没有修改php.ini的权限
Oct 16 PHP
php+Mysqli利用事务处理转账问题实例
Feb 11 PHP
php图像处理类实例
Jul 28 PHP
PHP使用数组依次替换字符串中匹配项
Jan 08 PHP
Yii rules常用规则示例
Mar 15 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
Aug 17 PHP
Yii2框架实现注册和登录教程
Sep 30 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
Sep 26 PHP
防止MySQL注入或HTML表单滥用的PHP程序
Jan 21 #PHP
php 动态多文件上传
Jan 18 #PHP
PHP $_SERVER详解
Jan 16 #PHP
php 删除数组元素
Jan 16 #PHP
php完全过滤HTML,JS,CSS等标签
Jan 16 #PHP
php array_flip() 删除数组重复元素
Jan 14 #PHP
PHP mkdir()定义和用法
Jan 14 #PHP
You might like
php网站被挂木马后的修复方法总结
2014/11/06 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
PHP实现微信红包金额拆分试玩的算法示例
2018/04/07 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
php输出形式实例整理
2020/05/05 PHP
javascript hasFocus使用实例
2010/06/29 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
2013/11/18 Javascript
Query中click(),bind(),live(),delegate()的区别
2013/11/19 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
js转html实体的方法
2016/09/27 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
2016/12/20 Javascript
浅析vue.js数组的变异方法
2018/06/30 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
解决vue-cli@3.xx安装不成功的问题及搭建ts-vue项目
2020/02/09 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
Python中的高级函数map/reduce使用实例
2015/04/13 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
django admin后台添加导出excel功能示例代码
2019/05/15 Python
python读写csv文件方法详细总结
2019/07/05 Python
Python threading的使用方法解析
2019/08/28 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
python读写文件write和flush的实现方式
2020/02/21 Python
python实现单机五子棋
2020/08/28 Python
上海方立数码笔试题
2013/10/18 面试题
亲属关系公证书
2014/04/08 职场文书
《鸿门宴》教学反思
2014/04/22 职场文书
师范大学生求职信
2014/06/13 职场文书
调研座谈会发言材料
2014/08/23 职场文书
导游词之广州陈家祠
2019/10/21 职场文书