带密匙的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 相关文章推荐
第七节 类的静态成员 [7]
Oct 09 PHP
使用PHP批量生成随机用户名
Jul 10 PHP
如何在Ubuntu下启动Apache的Rewrite功能
Jul 05 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
Apr 29 PHP
php递归删除目录与文件的方法
Jan 30 PHP
php判断对象是派生自哪个类的方法
Jun 20 PHP
php获取英文姓名首字母的方法
Jul 13 PHP
php获取远程文件大小
Oct 20 PHP
PHP如何使用Memcached
Apr 05 PHP
PHP异常处理定义与使用方法分析
Jul 25 PHP
实现php删除链表中重复的结点
Sep 27 PHP
php自动加载代码实例详解
Feb 26 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 Document 代码注释规范
2009/04/13 PHP
上传文件先创建目录 再上传到目录里面去
2010/12/29 PHP
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
javascript for循环设法提高性能
2010/02/24 Javascript
JS 遮照层实现代码
2010/03/31 Javascript
js判断两个日期是否相等的方法
2013/09/10 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
Javascript基础教程之switch语句
2015/01/18 Javascript
浅谈JavaScript中的string拥有方法的原因
2015/08/28 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
完善的jquery处理机制
2016/02/21 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
2017/06/23 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
2018/01/12 Javascript
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
浅谈小程序 setData学问多
2019/02/20 Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
2019/12/10 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
OpenLayers3加载常用控件使用方法详解
2020/09/25 Javascript
非递归的输出1-N的全排列实例(推荐)
2017/04/11 Python
浅谈Python peewee 使用经验
2017/10/20 Python
Python实现的桶排序算法示例
2017/11/29 Python
python配置grpc环境
2019/01/01 Python
Python 画出来六维图
2019/07/26 Python
python实现京东订单推送到测试环境,提供便利操作示例
2019/08/09 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
Keras自定义实现带masking的meanpooling层方式
2020/06/16 Python
基于python实现坦克大战游戏
2020/10/27 Python
python中的unittest框架实例详解
2021/02/05 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
毕业生的自我评价范文
2013/12/31 职场文书
比赛口号大全
2014/06/10 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
2015年质量管理工作总结范文
2015/05/18 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python