php 实现一个字符串加密解密的函数实例代码


Posted in PHP onNovember 01, 2016

php 实现一个字符串加密解密的函数

函数代码如下:

/*********************************************************************
  函数名称:encrypt
  函数作用:加密解密字符串
  使用方法:
  加密   :encrypt('str','E','nowamagic');
  解密   :encrypt('被加密过的字符串','D','nowamagic');
  参数说明:
  $string  :需要加密解密的字符串
  $operation:判断是加密还是解密:E:加密  D:解密
  $key   :加密的钥匙(密匙);
  
http://www.cnblogs.com/roucheng/
*********************************************************************/
  function encrypt($string,$operation,$key='')
  {
    $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
    {
      return str_replace('=','',base64_encode($result));
    }
  }

使用实例:

$id = 132;
  
$token = encrypt($id, 'E', 'a');
  
echo '加密:'.encrypt($id, 'E', 'a');
echo '<br />';
  
echo '解密:'.encrypt($token, 'D', 'a');

运行结果:

加密:AYCnIibFlg3ViRs
解密:132

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
PHP新手上路(十四)
Oct 09 PHP
Discuz板块横排显示图片的实现方法
May 28 PHP
php下目前为目最全的CURL中文说明
Aug 01 PHP
php做下载文件的实现代码及文件名中乱码解决方法
Feb 03 PHP
php实现查询百度google收录情况(示例代码)
Aug 02 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
Nov 07 PHP
PHP弹出对话框技巧详细解读
Sep 26 PHP
php实现的中文分词类完整实例
Feb 06 PHP
PHP使用函数用法详解
Sep 30 PHP
Yii框架ACF(accessController)简单权限控制操作示例
Apr 26 PHP
php链式操作的实现方式分析
Aug 12 PHP
关于laravel 日志写入失败问题汇总
Oct 17 PHP
PHP+Ajax异步带进度条上传文件实例
Nov 01 #PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 #PHP
PHP用户验证和标签推荐的简单使用
Oct 31 #PHP
PHP实现小偷程序实例
Oct 31 #PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
Oct 31 #PHP
利用php做服务器和web前端的界面进行交互
Oct 31 #PHP
php将服务端的文件读出来显示在web页面实例
Oct 31 #PHP
You might like
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
php float不四舍五入截取浮点型字符串方法总结
2013/10/28 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
PHP和C#可共用的可逆加密算法详解
2015/10/26 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
2016/09/09 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
AngularJS ui-router (嵌套路由)实例
2017/03/10 Javascript
基于vue+canvas的excel-like组件实例详解
2017/11/28 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
vue interceptor 使用教程实例详解
2018/09/13 Javascript
ES6 Proxy实现Vue的变化检测问题
2019/06/11 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
详解JavaScript 事件流
2020/09/02 Javascript
js获取url页面id,也就是最后的数字文件名
2020/09/25 Javascript
[01:02:20]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
Python实现的单向循环链表功能示例
2017/11/10 Python
python shell根据ip获取主机名代码示例
2017/11/25 Python
pandas进行数据的交集与并集方式的数据合并方法
2018/06/27 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
python实现接口并发测试脚本
2019/06/25 Python
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
内科护士实习自我鉴定
2013/10/17 职场文书
大学生实习思想汇报
2014/01/12 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
学前班评语大全
2014/05/04 职场文书
服务员岗位职责范本
2015/04/09 职场文书
2015年行政部工作总结
2015/04/28 职场文书