带密匙的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 相关文章推荐
10条PHP编程习惯助你找工作
Sep 29 PHP
PHP 柱状图实现代码
Dec 04 PHP
PHP JSON格式数据交互实例代码详解
Jan 13 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
Nov 02 PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
Nov 07 PHP
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
Jun 08 PHP
解析thinkphp基本配置 convention.php
Jun 18 PHP
smarty简单入门实例
Nov 28 PHP
Yii分页用法实例详解
Dec 04 PHP
Thinkphp整合阿里云OSS图片上传实例代码
Apr 28 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
May 14 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 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与javascript对多项选择的处理
2006/10/09 PHP
NOT NULL 和NULL
2007/01/15 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
php车辆违章查询数据示例
2016/10/14 PHP
PHP通过引用传递参数用法分析
2016/12/01 PHP
php基于dom实现的图书xml格式数据示例
2017/02/03 PHP
PHP封装的mysqli数据库操作类示例
2019/02/16 PHP
jQuery筛选器children()案例详解(图文)
2013/02/17 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
2019/11/10 Javascript
微信小程序实现星级评价
2019/11/20 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
详解Vue之事件处理
2020/07/10 Javascript
详解python 注释、变量、类型
2018/08/10 Python
python3 打开外部程序及关闭的示例
2018/11/06 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
Python理解递归的方法总结
2019/01/28 Python
python安装dlib库报错问题及解决方法
2020/03/16 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
使用python操作lmdb对数据读取的实例
2020/12/11 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
竞选班干部演讲稿600字
2014/08/20 职场文书
村主任群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
关于实现中国梦的心得体会
2016/01/05 职场文书
青年岗位能手事迹材料(2016推荐版)
2016/03/01 职场文书
Python深度学习之实现卷积神经网络
2021/06/05 Python