带密匙的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实现MVC开发得最简单的方法――模型
Apr 10 PHP
php+AJAX传送中文会导致乱码的问题的解决方法
Sep 08 PHP
php iconv() : Detected an illegal character in input string
Dec 05 PHP
服务器web工具 php环境下
Dec 29 PHP
解析func_num_args与func_get_args函数的使用
Jun 24 PHP
PHP微框架Dispatch简介
Jun 12 PHP
PHP5.3安装Zend Guard Loader图文教程
Sep 29 PHP
php生成随机颜色的方法
Nov 13 PHP
PHP调用MySQL存储过程并返回值的方法
Dec 26 PHP
php通过rmdir删除目录的简单用法
Mar 18 PHP
PHP共享内存用法实例分析
Feb 12 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 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
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
BBS(php &amp; mysql)完整版(五)
2006/10/09 PHP
php 正则表达式小结
2009/08/31 PHP
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
php Imagick获取图片RGB颜色值
2014/07/28 PHP
php实现简单的守护进程创建、开启与关闭操作
2019/08/13 PHP
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
2014/07/06 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
2017/05/26 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
AngularJS基于http请求实现下载php生成的excel文件功能示例
2018/01/23 Javascript
在vue项目中使用md5加密的方法
2018/09/14 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
linecache模块加载和缓存文件内容详解
2018/01/11 Python
Python爬虫天气预报实例详解(小白入门)
2018/01/24 Python
python中的文件打开与关闭操作命令介绍
2018/04/26 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
python multiprocessing多进程变量共享与加锁的实现
2019/10/02 Python
pygame实现贪吃蛇游戏(下)
2019/10/29 Python
详解python itertools功能
2020/02/07 Python
Python 图片处理库exifread详解
2021/02/25 Python
【HTML5】3D模型--百行代码实现旋转立体魔方实例
2016/12/16 HTML / CSS
中学生团员自我评价分享
2013/12/07 职场文书
迎八一活动主题
2014/01/31 职场文书
财务人员求职自荐书范文
2014/02/10 职场文书
项目工作说明书
2014/07/29 职场文书
2014国庆黄金周超市促销活动方案
2014/09/21 职场文书
2015中秋祝酒词
2015/08/12 职场文书
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android
Java基础——Map集合
2022/04/01 Java/Android