带密匙的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 相关文章推荐
Windows2003 下 MySQL 数据库每天自动备份
Dec 21 PHP
PHP与SQL注入攻击[三]
Apr 17 PHP
php foreach 参数强制类型转换的问题
Dec 10 PHP
PHP的一个基础知识 表单提交
Jul 04 PHP
php 文件缓存函数
Oct 08 PHP
比file_get_contents稳定的curl_get_contents分享
Jan 11 PHP
php生成固定长度纯数字编码的方法
Jul 09 PHP
Yii实现复选框批量操作实例代码
Mar 15 PHP
YII2.0框架行为(Behavior)深入详解
Jul 26 PHP
Laravel获取所有的数据库表及结构的方法
Oct 10 PHP
tp5 实现列表数据根据状态排序
Oct 18 PHP
基于php+MySql实现学生信息管理系统实例
Aug 04 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中创建空文件的代码[file_put_contents vs touch]
2012/01/20 PHP
PHP session文件独占锁引起阻塞问题解决方法
2015/05/12 PHP
PHP关联数组实现根据元素值删除元素的方法
2015/06/26 PHP
PHP实现简单注册登录系统
2020/12/28 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
2013/12/24 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
2015/02/04 Javascript
javascript连续赋值问题
2015/07/08 Javascript
Bootstrap富文本组件wysiwyg数据保存到mysql的方法
2016/05/09 Javascript
JavaScript原生对象常用方法总结(推荐)
2016/05/13 Javascript
node+express制作爬虫教程
2016/11/11 Javascript
JavaScript之WebSocket技术详解
2016/11/18 Javascript
详解webpack+es6+angular1.x项目构建
2017/05/02 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
2018/05/08 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
2019/02/28 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
Python 除法小技巧
2008/09/06 Python
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
详解Python中的文本处理
2015/04/11 Python
python浪漫表白源码
2019/04/05 Python
python之yield和Generator深入解析
2019/09/18 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
Python中zipfile压缩文件模块的基本使用教程
2020/06/14 Python
selenium学习教程之定位以及切换frame(iframe)
2021/01/04 Python
什么是设计模式
2012/06/17 面试题
预备党员党校学习自我评价分享
2013/11/12 职场文书
业务部门经理岗位职责
2014/02/23 职场文书
入职担保书怎么写
2014/05/12 职场文书
2014年职称评定工作总结
2014/11/26 职场文书