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 ajax 分页类代码
Nov 13 PHP
允许phpmyadmin空密码登录的配置方法
May 29 PHP
PHP使用DES进行加密与解密的方法详解
Jun 06 PHP
几个实用的PHP内置函数使用指南
Nov 27 PHP
laravel安装zend opcache加速器教程
Mar 02 PHP
PHP提高编程效率的20个要点
Sep 23 PHP
PHP7之Mongodb API使用详解
Dec 26 PHP
Yii2创建多界面主题(Theme)的方法
Oct 08 PHP
php获取服务器操作系统相关信息的方法
Oct 08 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
Apr 09 PHP
php实现等比例压缩图片
Jul 26 PHP
php+Ajax处理xml与json格式数据的方法示例
Mar 04 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
Syphon 秘笈
2021/03/03 冲泡冲煮
遭遇php的in_array低性能问题
2013/09/17 PHP
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
不提示直接关闭网页窗口的JS示例代码
2013/12/17 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
比较常见的javascript中定义函数的区别
2015/11/09 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
JavaScript优化专题之Loading and Execution加载和运行
2016/01/20 Javascript
JavaScript DOM 对象深入了解
2016/07/20 Javascript
聊一聊Vue.js过渡效果
2016/09/07 Javascript
微信小程序 form组件详解及简单实例
2017/01/10 Javascript
javascript使用正则实现去掉字符串前面的所有0
2018/07/23 Javascript
js数据类型检测总结
2018/08/05 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
Python函数参数类型*、**的区别
2015/04/11 Python
Python中psutil的介绍与用法
2019/05/02 Python
奥地利网上书店:Weltbild
2017/07/14 全球购物
美国在线购买内衣网站:HerRoom
2020/02/22 全球购物
毕业生简单求职信
2013/11/19 职场文书
大众服装店创业计划书范文
2014/01/01 职场文书
土木工程专业推荐信
2014/02/19 职场文书
2016五一劳动节慰问信
2015/11/30 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
2019入党申请书格式和范文
2019/06/25 职场文书
担保书范文
2019/07/09 职场文书
IDEA 链接Mysql数据库并执行查询操作的完整代码
2021/05/20 MySQL
MongoDB连接数据库并创建数据等使用方法
2021/11/27 MongoDB
Pandas-DataFrame知识点汇总
2022/03/16 Python
Python集合set()使用的方法详解
2022/03/18 Python