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 读取文件的正确方法
Apr 29 PHP
理解和运用PHP中的多态性[译]
Aug 02 PHP
PHP 常用数组内部函数(Array Functions)介绍
Jun 05 PHP
如何使用PHP批量去除文件UTF8 BOM信息
Aug 05 PHP
PHP函数eval()介绍和使用示例
Aug 20 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
Dec 22 PHP
php字符串过滤与替换小结
Jan 26 PHP
搭建基于Docker的PHP开发环境的详细教程
Jul 01 PHP
PHP封装的多文件上传类实例与用法详解
Feb 07 PHP
Zend Framework数据库操作技巧总结
Feb 18 PHP
php微信公众号开发之答题连闯三关
Oct 20 PHP
PHP实现随机发放扑克牌
Apr 21 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
Smarty的配置与高级缓存技术分享
2012/06/05 PHP
简单谈谈php中ob_flush和flush的区别
2014/11/27 PHP
PHP实现根据时间戳获取周几的方法
2016/02/26 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
Prototype Array对象 学习
2009/07/19 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
2013/09/27 Javascript
node.js中的http.response.setHeader方法使用说明
2014/12/14 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
js评分组件使用详解
2017/06/06 Javascript
微信小程序如何连接Java后台
2019/08/08 Javascript
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
深入浅析Python字符编码
2015/11/12 Python
python3音乐播放器简单实现代码
2020/04/20 Python
Python3中条件控制、循环与函数的简易教程
2017/11/21 Python
python怎么判断模块安装完成
2020/06/19 Python
python正则表达式的懒惰匹配和贪婪匹配说明
2020/07/13 Python
Python使用jpype模块调用jar包过程解析
2020/07/29 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
Python接口自动化测试的实现
2020/08/28 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
DJI大疆德国官方商城:大疆无人机
2018/09/01 全球购物
NFL官方在线商店:NFLShop
2020/07/29 全球购物
大学生军训自我鉴定
2014/02/12 职场文书
道路交通安全实施方案
2014/03/12 职场文书
党员公开承诺书和承诺事项
2014/03/25 职场文书
春节请假条
2014/04/11 职场文书
立志成才演讲稿
2014/09/04 职场文书
2015年乡镇平安建设工作总结
2015/05/13 职场文书
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers
JS函数式编程实现XDM一
2022/06/16 Javascript