带密匙的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多用户计数器代码
Mar 11 PHP
PHP 读取和修改大文件的某行内容的代码
Oct 30 PHP
一个简洁的PHP可逆加密函数(分享)
Jun 06 PHP
php时间戳转换的示例
Mar 31 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
Mar 22 PHP
简单PHP会话(session)说明介绍
Aug 21 PHP
ThinkPHP下表单令牌错误与解决方法分析
May 20 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
Jan 29 PHP
php实现根据身份证获取精准年龄
Feb 26 PHP
php实现简单四则运算器
Nov 29 PHP
你真的了解PHP中的引用符号(&)吗
May 12 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
长波有什么东西
2021/03/01 无线电
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
CI框架整合smarty步骤详解
2016/05/19 PHP
php7 新增功能实例总结
2020/05/25 PHP
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
socket.io实现在线群聊功能
2017/04/07 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
基于JavaScript实现数码时钟效果
2020/03/30 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
js实现简单掷骰子小游戏
2019/10/24 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
Jquery滑动门/tab切换实现方法完整示例
2020/06/05 jQuery
在vue项目中promise解决回调地狱和并发请求的问题
2020/11/09 Javascript
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
Python入门篇之条件、循环
2014/10/17 Python
Python实现爬虫抓取与读写、追加到excel文件操作示例
2018/06/27 Python
python如何求数组连续最大和的示例代码
2020/02/04 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
Fossil美国官网:Fossil手表、手袋、珠宝及配件
2017/02/01 全球购物
澳大利亚在线时尚精品店:Hello Molly
2018/02/26 全球购物
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
教你怎样写好自我评价
2013/10/05 职场文书
酒吧员工的岗位职责
2013/11/26 职场文书
幸福家庭事迹材料
2014/02/03 职场文书
自我鉴定书
2014/03/24 职场文书
群众路线对照检查材料
2014/09/22 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
求职信范文怎么写
2015/03/19 职场文书
感恩主题班会教案
2015/08/12 职场文书
高性能跳频抗干扰宽带自组网电台
2022/02/18 无线电