带密匙的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 和 MySQL 基础教程(四)
Oct 09 PHP
可以在线执行PHP代码包装修正版
Mar 15 PHP
通过JavaScript或PHP检测Android设备的代码
Mar 09 PHP
php 抽象类的简单应用
Sep 06 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
Oct 31 PHP
利用PHP实现图片等比例放大和缩小的方法详解
Jun 06 PHP
php实现12306余票查询、价格查询示例
Apr 17 PHP
PHP连接SQLServer2005的方法
Jan 27 PHP
php使用curl获取https请求的方法
Feb 11 PHP
php循环table实现一行两列显示的方法
Jun 04 PHP
PHP判断当前使用的是什么浏览器(推荐)
Oct 27 PHP
PHP tp5中使用原生sql查询代码实例
Oct 28 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 一个随机字符串生成代码
2010/05/26 PHP
启用Csrf后POST数据时出现的400错误
2015/07/05 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
2015/10/27 PHP
PHP引用的调用方法分析
2016/04/25 PHP
php生成微信红包数组的方法
2019/09/05 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
2013/10/30 Javascript
js导航栏单击事件背景变换示例代码
2014/01/13 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
javascript中html字符串转化为jquery dom对象的方法
2015/08/27 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
2016/07/27 Javascript
JS实现HTML表格排序功能
2016/08/05 Javascript
jQuery实现元素的插入
2017/02/27 Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
2017/05/17 Javascript
react-redux中connect的装饰器用法@connect详解
2018/01/13 Javascript
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
vue实现登录功能
2020/12/31 Vue.js
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
Face++ API实现手势识别系统设计
2018/11/21 Python
python 实现UTC时间加减的方法
2018/12/31 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
Python基于pyjnius库实现访问java类
2020/07/31 Python
HTML5头部标签的一些常用信息小结
2016/10/23 HTML / CSS
介绍一下write命令
2012/09/24 面试题
自荐信范文
2013/12/10 职场文书
三下乡活动方案
2014/01/31 职场文书
总经理岗位职责描述
2014/02/08 职场文书
工作睡觉检讨书
2014/02/25 职场文书
领导干部作风建设剖析材料
2014/10/11 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
逃课检讨书
2015/01/26 职场文书