带密匙的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
Dec 14 PHP
php empty函数 使用说明
Aug 10 PHP
PHP开发中的错误收集,不定期更新。
Feb 03 PHP
Apache服务器下防止图片盗链的办法
Jul 06 PHP
PHP 等比例缩放图片详解及实例代码
Sep 18 PHP
PHP调用Mailgun发送邮件的方法
May 04 PHP
thinkPHP中U方法加密传递参数功能示例
May 29 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
PHP合并两个或多个数组的方法
Jan 20 PHP
PHP单例模式数据库连接类与页面静态化实现方法
Mar 20 PHP
PHP中命名空间的使用例子
Mar 22 PHP
解析laravel使用workerman用户交互、服务器交互
Apr 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数字格式化
2006/12/06 PHP
php 输出双引号&quot;与单引号'的方法
2010/05/09 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
PHP请求Socket接口测试实例
2016/08/12 PHP
PHP fclose函数用法总结
2019/02/15 PHP
PHP如何通过date() 函数格式化显示时间
2020/11/13 PHP
关于Javascript 的 prototype问题。
2007/01/03 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
JavaScript实现16进制颜色值转RGB的方法
2015/02/09 Javascript
js实现进度条的方法
2015/02/13 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
mpvue写一个CPASS小程序的示例
2018/09/04 Javascript
通过jQuery学习js类型判断的技巧
2019/05/27 jQuery
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
python连接sql server乱码的解决方法
2013/01/28 Python
python 排列组合之itertools
2013/03/20 Python
python关键字and和or用法实例
2015/05/28 Python
Python+selenium 获取一组元素属性值的实例
2018/06/22 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
Python实现PS滤镜中的USM锐化效果
2020/12/04 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
Jones New York官网:美国女装品牌,受白领女性欢迎
2019/11/26 全球购物
2019史上最全Database工程师题库
2015/12/06 面试题
质量安全标语
2014/06/07 职场文书
火烧圆明园观后感
2015/06/03 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
PHP使用非对称加密算法RSA
2021/04/21 PHP
Python 循环读取数据内存不足的解决方案
2021/05/25 Python
SQL Server中的游标介绍
2022/05/20 SQL Server