带密匙的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之第一天
Oct 09 PHP
php中session_unset与session_destroy的区别分析
Jun 16 PHP
一个PHP验证码类代码分享(已封装成类)
Jul 17 PHP
PHP的array_diff()函数在处理大数组时的效率问题
Nov 27 PHP
PHP编码转换函数 自动转换字符集支持数组转换
Dec 16 PHP
探讨GDFONTPATH能否被winxp下的php支持
Jun 21 PHP
Yii把CGridView文本框换成下拉框的方法
Dec 03 PHP
php中instanceof 与 is_a()区别分析
Mar 03 PHP
浅谈php错误提示及查错方法
Jul 14 PHP
YII Framework框架教程之国际化实现方法
Mar 14 PHP
提交表单后 PHP获取提交内容的实现方法
May 25 PHP
PHP页面输出搜索后跳转下一页的处理方法
Sep 30 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 和 HTML
2006/10/09 PHP
做个自己站内搜索引擎
2006/10/09 PHP
php下实现农历日历的代码
2007/03/07 PHP
php 前一天或后一天的日期
2008/06/28 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
学习php设计模式 php实现备忘录模式(Memento)
2015/12/09 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
php 利用socket发送GET,POST请求的实例代码
2020/07/04 PHP
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
Javascript 函数parseInt()转换时出现bug问题
2014/05/20 Javascript
JS实现点击按钮后框架内载入不同网页的方法
2015/05/05 Javascript
JavaScript中的原型prototype属性使用详解
2015/06/05 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
2017/11/14 jQuery
详解如何搭建mpvue框架搭配vant组件库的小程序项目
2019/05/16 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
JS闭包原理及其使用场景解析
2020/12/03 Javascript
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
[02:59]DOTA2完美大师赛主赛事第三日精彩集锦
2017/11/25 DOTA
Python 判断是否为质数或素数的实例
2017/10/30 Python
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
python实现统计文本中单词出现的频率详解
2019/05/20 Python
Pytorch中的variable, tensor与numpy相互转化的方法
2019/10/10 Python
Django实现图片上传功能步骤解析
2020/04/22 Python
Django ORM实现按天获取数据去重求和例子
2020/05/18 Python
Python通过format函数格式化显示值
2020/10/17 Python
HTML5的结构和语义(5):交互
2008/10/17 HTML / CSS
复古斯堪的纳维亚儿童服装:Baby go Retro
2017/09/09 全球购物
药学专业大学生个人的自我评价
2013/11/04 职场文书
参观考察邀请函范文
2014/01/29 职场文书
公司司机岗位职责范本
2014/03/03 职场文书
学生实习证明范文
2014/09/28 职场文书
个人借款协议书范本
2014/11/17 职场文书