带密匙的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 相关文章推荐
PHP4在WinXP下IIS和Apache2服务器上的安装实例
Oct 09 PHP
php数据库连接
Oct 09 PHP
php图片加中文水印实现代码分享
Oct 31 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
Jan 11 PHP
深入理解php的MySQL连接类
Jun 07 PHP
php的declare控制符和ticks教程(附示例)
Mar 21 PHP
php打印输出棋盘的实现方法
Dec 23 PHP
py文件转exe时包含paramiko模块出错解决方法
Aug 12 PHP
php smtp实现发送邮件功能
Jun 22 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 PHP
PHP实现通过strace定位故障原因的方法
Apr 29 PHP
PHP让网站移动访问更加友好方法
Feb 14 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 session有效期问题
2009/04/26 PHP
PHP实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
JQuery实现自定义对话框的代码
2008/06/15 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
JavaScript实现点击按钮后变灰避免多次重复提交
2013/07/15 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
javascript常用功能汇总
2015/07/05 Javascript
详解参数传递四种形式
2015/07/21 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
详解Node.js项目APM监控之New Relic
2017/05/12 Javascript
vue2 全局变量的设置方法
2018/03/09 Javascript
webpack打包优化的几个方法总结
2020/02/10 Javascript
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
在Python上基于Markov链生成伪随机文本的教程
2015/04/17 Python
简单了解OpenCV是个什么东西
2017/11/10 Python
python3 requests中使用ip代理池随机生成ip的实例
2018/05/07 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
python 多线程将大文件分开下载后在合并的实例
2018/11/09 Python
Python面向对象封装操作案例详解 II
2020/01/02 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
迪卡侬印尼体育用品商店:Decathlon印尼
2020/03/11 全球购物
怎样写演讲稿
2014/01/04 职场文书
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
新学期标语
2014/06/30 职场文书
2014年政工师工作总结
2014/12/18 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
作文之亲情600字
2019/09/23 职场文书
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python