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 相关文章推荐
web方式ftp
Oct 09 PHP
php调用mysql数据 dbclass类
May 07 PHP
PHP stripos()函数及注意事项的分析
Jun 08 PHP
Server.HTMLEncode让代码在页面里显示为源代码
Dec 08 PHP
通过curl模拟post和get方式提交的表单类
Apr 23 PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 PHP
在PHP程序中使用Rust扩展的方法
Jul 03 PHP
PHP中的Session对象如何使用
Sep 25 PHP
PHP Cookei记录用户历史浏览信息的代码
Feb 03 PHP
mac os快速切换多个PHP版本的方法
Mar 07 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
Aug 19 PHP
PHP类的自动加载与命名空间用法实例分析
Jun 05 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
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
php数组键值用法实例分析
2015/02/27 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
php动态生成缩略图并输出显示的方法
2015/04/20 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
2016/09/22 PHP
JS中 用户登录系统的解决办法
2013/04/15 Javascript
js 高效去除数组重复元素示例代码
2013/12/19 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
2015/08/28 Javascript
jQuery焦点图切换特效代码分享
2015/09/15 Javascript
谈谈javascript中使用连等赋值操作带来的问题
2015/11/26 Javascript
JavaScript箭头(arrow)函数详解
2017/06/04 Javascript
Vue仿今日头条实例详解
2018/02/06 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
2018/08/24 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
详解微信小程序开发之formId使用(模板消息)
2019/08/27 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
初步理解Python进程的信号通讯
2015/04/09 Python
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
PIL包中Image模块的convert()函数的具体使用
2020/02/26 Python
Pandas读取csv时如何设置列名
2020/06/02 Python
英国床垫在线:Mattress Online
2016/12/07 全球购物
简历自我评价怎么写好呢?
2014/01/04 职场文书
关于旷工的检讨书
2014/02/02 职场文书
小学二年级评语
2014/04/21 职场文书
三月学雷锋月活动总结
2014/04/28 职场文书
保护环境建议书400字
2014/05/13 职场文书
作风建设演讲稿
2014/05/23 职场文书
公司任命书范本
2014/06/04 职场文书
服装设计师求职信
2014/06/04 职场文书
团组织推优材料
2014/12/29 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书