带密匙的php加密解密示例分享


Posted in PHP onJanuary 29, 2014
<?php 
$id = "https://3water.com";
$token = encrypt($id, 'E', '3water');
echo '加密:'.encrypt($id, 'E', '3water');
echo '<br />';
echo '解密:'.encrypt($token, 'D', '3water');
/*********************************************************************
函数名称:encrypt
函数作用:加密解密字符串
使用方法:
加密 :encrypt('str','E','qingdou');
解密 :encrypt('被加密过的字符串','D','qingdou');
参数说明:
$string   :需要加密解密的字符串
$operation:判断是加密还是解密:E:加密   D:解密
$key  :加密的钥匙(密匙);
*********************************************************************/
function encrypt($string,$operation,$key='')
{
$src  = array("/","+","=");
$dist = array("_a","_b","_c");
if($operation=='D'){$string  = str_replace($dist,$src,$string);}
$key=md5($key);
$key_length=strlen($key);
$string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string;
$string_length=strlen($string);
$rndkey=$box=array();
$result='';
for($i=0;$i<=255;$i++)
{
$rndkey[$i]=ord($key[$i%$key_length]);
$box[$i]=$i;
}
for($j=$i=0;$i<256;$i++)
{
$j=($j+$box[$i]+$rndkey[$i])%256;
$tmp=$box[$i];
$box[$i]=$box[$j];
$box[$j]=$tmp;
}
for($a=$j=$i=0;$i<$string_length;$i++)
{
$a=($a+1)%256;
$j=($j+$box[$a])%256;
$tmp=$box[$a];
$box[$a]=$box[$j];
$box[$j]=$tmp;
$result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256]));
}
if($operation=='D')
{
if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8))
{
return substr($result,8);
}
else
{
return'';
}
}
else
{
$rdate  = str_replace('=','',base64_encode($result));
$rdate  = str_replace($src,$dist,$rdate);
return $rdate;
}
}
?>
PHP 相关文章推荐
PHP一些常用的正则表达式字符的一些转换
Jul 29 PHP
php 什么是PEAR?
Mar 19 PHP
php使用curl存储cookie的示例
Mar 31 PHP
thinkphp实现面包屑导航(当前位置)例子分享
May 10 PHP
php实现在服务器端调整图片大小的方法
Jun 16 PHP
PHP 获取ip地址代码汇总
Jul 05 PHP
Yii2 rbac权限控制操作步骤实例教程
Apr 29 PHP
Laravel实现表单提交
May 07 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
Mar 30 PHP
用PHP做了一个领取优惠券活动的示例代码
Jul 05 PHP
laravel开发环境homestead搭建过程详解
Jul 03 PHP
PHP过滤★等特殊符号的正则
Jan 27 #PHP
php中自定义函数dump查看数组信息类似var_dump
Jan 27 #PHP
PHP中的按位与和按位或操作示例
Jan 27 #PHP
php遍历目录输出目录及其下的所有文件示例
Jan 27 #PHP
PHP中source #N问题的解决方法
Jan 27 #PHP
php计算数组不为空元素个数的方法
Jan 27 #PHP
两级联动select刷新后其值保持不变的实现方法
Jan 27 #PHP
You might like
php操作xml
2013/10/27 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
Javascript中的Split使用方法与技巧
2007/03/09 Javascript
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
2013/05/13 Javascript
JS 有趣的eval优化输入验证实例代码
2013/09/22 Javascript
js监听滚动条滚动事件使得某个标签内容始终位于同一位置
2014/01/24 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
深入理解(function(){... })();
2016/08/16 Javascript
DOM操作原生js 的bug,使用jQuery 可以消除的解决方法
2016/09/04 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
Python中用pycurl监控http响应时间脚本分享
2015/02/02 Python
python开发之文件操作用法实例
2015/11/13 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
python将字典内容写入json文件的实例代码
2020/08/12 Python
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
Amara美国站:英国高端家居礼品网站,世界各地的奢侈家具品牌
2017/07/26 全球购物
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
GetYourGuide台湾:预订旅游活动、景点和旅游项目
2019/06/10 全球购物
护理专业的自荐信
2013/10/22 职场文书
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
党支部综合考察材料
2014/05/19 职场文书
银行纠风工作实施方案
2014/06/08 职场文书
商场父亲节活动方案
2014/08/27 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
2014年保洁员工作总结
2014/11/19 职场文书
2015秋季开学典礼致辞
2015/07/16 职场文书
篮球拉拉队口号
2015/12/25 职场文书
自愿离婚协议书范本2016
2016/03/18 职场文书
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL