带密匙的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下实现伪 url 的超简单方法[转]
Sep 24 PHP
php 分页类 扩展代码
Jun 11 PHP
有关phpmailer的详细介绍及使用方法
Jan 28 PHP
PHP常用的缓存技术汇总
May 05 PHP
php中出现空白页的原因及解决方法汇总
Jul 08 PHP
PHP5.3安装Zend Guard Loader图文教程
Sep 29 PHP
php实现Session存储到Redis
Nov 11 PHP
实例讲解yii2.0在php命令行中运行的步骤
Dec 01 PHP
PHP+ajax分页实例简析
Dec 07 PHP
PHP解压tar.gz格式文件的方法
Feb 14 PHP
PHP实现的多文件上传类及用法示例
May 06 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
Oct 25 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 SplObjectStorage使用实例
2015/05/12 PHP
PHP加密解密函数详解
2015/10/28 PHP
关于PHP文件的自动运行方法分析
2016/05/13 PHP
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
关于JavaScript命名空间的一些心得
2014/06/07 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
NodeJS学习笔记之Connect中间件模块(二)
2015/01/27 NodeJs
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
概述一个页面从输入URL到页面加载完的过程
2016/12/16 Javascript
基于JavaScript实现评论框展开和隐藏功能
2017/08/25 Javascript
浅谈angular表单提交中ng-submit的默认使用方法
2018/09/30 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
2019/09/11 Javascript
jQuery 动态粒子效果示例代码
2020/07/07 jQuery
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
[00:10]神之谴戒
2019/03/06 DOTA
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
Python实现购物车购物小程序
2018/04/18 Python
使用Python将Mysql的查询数据导出到文件的方法
2019/02/25 Python
Django中使用 Closure Table 储存无限分级数据
2019/06/06 Python
python实现淘宝购物系统
2019/10/25 Python
宝塔面板成功部署Django项目流程(图文)
2020/06/22 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
Kiehl’s科颜氏西班牙官方网站:源自美国的植物护肤品牌
2020/02/22 全球购物
报关简历自我评价怎么写
2013/09/19 职场文书
大学生职业生涯规划书模板
2014/01/18 职场文书
餐饮企业总经理岗位职责范文
2014/02/18 职场文书
五年级上册复习计划
2015/01/19 职场文书
捐款通知怎么写
2015/04/24 职场文书
美丽心灵观后感
2015/06/01 职场文书
法律讲堂观后感
2015/06/11 职场文书
导游词之南京中山陵
2019/11/27 职场文书
Oracle 区块链表创建过程详解
2021/05/15 Oracle