onethink中封装的加密解密函数

  1. <?php
  2.  
  3. /**
  4. * 系统加密方法
  5. * @param string $data 要加密的字符串
  6. * @param string $key 加密密钥
  7. * @param int $expire 过期时间 单位 秒
  8. * @return string
  9. * @author 麦当苗儿 <zuojiazi@vip.qq.com>
  10. */
  11. function think_encrypt($data, $key = '', $expire = 0) {
  12. $key = md5(empty($key) ? C('DATA_AUTH_KEY') : $key);
  13. $data = base64_encode($data);
  14. $x = 0;
  15. $len = strlen($data);
  16. $l = strlen($key);
  17. $char = '';
  18.  
  19. for ($i = 0; $i < $len; $i++) {
  20. if ($x == $l) $x = 0;
  21. $char .= substr($key, $x, 1);
  22. $x++;
  23. }
  24.  
  25. $str = sprintf('%010d', $expire ? $expire + time():0);
  26.  
  27. for ($i = 0; $i < $len; $i++) {
  28. $str .= chr(ord(substr($data, $i, 1)) + (ord(substr($char, $i, 1)))%256);
  29. }
  30. return str_replace(array('+','/','='),array('-','_',''),base64_encode($str));
  31. }
  32.  
  33. /**
  34. * 系统解密方法
  35. * @param string $data 要解密的字符串 (必须是think_encrypt方法加密的字符串)
  36. * @param string $key 加密密钥
  37. * @return string
  38. * @author 麦当苗儿 <zuojiazi@vip.qq.com>
  39. */
  40. function think_decrypt($data, $key = ''){
  41. $key = md5(empty($key) ? C('DATA_AUTH_KEY') : $key);
  42. $data = str_replace(array('-','_'),array('+','/'),$data);
  43. $mod4 = strlen($data) % 4;
  44. if ($mod4) {
  45. $data .= substr('====', $mod4);
  46. }
  47. $data = base64_decode($data);
  48. $expire = substr($data,0,10);
  49. $data = substr($data,10);
  50.  
  51. if($expire > 0 && $expire < time()) {
  52. return '';
  53. }
  54. $x = 0;
  55. $len = strlen($data);
  56. $l = strlen($key);
  57. $char = $str = '';
  58.  
  59. for ($i = 0; $i < $len; $i++) {
  60. if ($x == $l) $x = 0;
  61. $char .= substr($key, $x, 1);
  62. $x++;
  63. }
  64.  
  65. for ($i = 0; $i < $len; $i++) {
  66. if (ord(substr($data, $i, 1))<ord(substr($char, $i, 1))) {
  67. $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
  68. }else{
  69. $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
  70. }
  71. }
  72. return base64_decode($str);
  73. }
  74.  
  75. ?>

onethink加密解密函数的更多相关文章

  1. 2个比较经典的PHP加密解密函数分享

    项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理. 最常见的应用在用户登录以及一些AP ...

  2. php中base64_decode与base64_encode加密解密函数

    php中base64_decode与base64_encode加密解密函数,实例分析了base64加密解密函数的具体用法,具有一定的实用价值,需要的朋友可以参考下 本文实例讲述了php中base64_ ...

  3. 各种加密解密函数(URL加密解密、sha1加密解密、des加密解密)

    原文:各种加密解密函数(URL加密解密.sha1加密解密.des加密解密) 普通hash函数如md5.sha1.base64等都是不可逆函数.虽然我们利用php可以利用这些函数写出可逆函数来.但是跨语 ...

  4. C# 字符串加密解密函数

    原文:C# 字符串加密解密函数 using System; using System.Text;using System.Security.Cryptography; using System.IO; ...

  5. PHP 2个比较经典的加密解密函数

    这篇文章主要介绍了2个比较经典的PHP加密解密函数分享,一个是Discuz!的authcode加密函数(带详细分解),一个是encrypt()函数,都比较经典,需要的朋友可以参考下 项目中有时我们需要 ...

  6. 介绍几个PHP 自带的加密解密函数

    PHP 自带的加密解密函数 目前经常使用的加密函数有:md5(), sha1(), crypt(), base64_encode(), urlencode() . 其中 md5(), sha1(), ...

  7. php自带加密解密函数

    php自带加密解密函数 一.总结 一句话总结:可逆和不可逆函数. 二.php自带加密解密函数 1.不可逆的加密函数为:md5().crypt() md5() 用来计算 MD5 哈稀.语法为:strin ...

  8. [PHP]加密解密函数

    非常给力的authcode加密函数,Discuz!经典代码(带详解) function authcode($string, $operation = 'DECODE', $key = '', $exp ...

  9. PHP和.NET通用的加密解密函数类,均使用3DES加解密 .

    以下为php代码 <PRE class=PHP name="code"> </PRE><PRE class=PHP name="code&q ...

随机推荐

  1. 项目规范和建立-从frozenui学习

    1.分支branches开发新功能,主干trunk是稳定发布的.因为frozenui下载完,看到branches比trunk多了一个版本 2.版本号定义,主版本.次版本.修订号 大版本号: 主版本号: ...

  2. 【python】python的二元表达式和三元表达式

    二元表达式 x,y=4,3if x>y: s = yelse: s= x print s   x if x<y else y 三元表达式: >>> def f(x,y): ...

  3. Educational Codeforces Round 6 C. Pearls in a Row

    Educational Codeforces Round 6 C. Pearls in a Row 题意:一个3e5范围的序列:要你分成最多数量的子序列,其中子序列必须是只有两个数相同, 其余的数只能 ...

  4. atexit()函数

    atexit()函数  头文件:#include<stdlib.h> 功 能: 注册终止函数(即main执行结束后调用的函数) 用 法: int atexit(void (*func)(v ...

  5. 【原创】Mvc学习笔记(1)

    1.新建MVC4项目 在MVC4中有App_Data文件夹,这个文件夹里可以放一些重要的数据,比如说数据库的mdf文件等等,这个文件夹非常安全,因为这个文件夹不允许被别人下载,不允许被浏览器访问. A ...

  6. DM8168 编译filesystem步骤

    在板子跑起来之前,需要先编译好8168的文件系统.前提是已经设置好板子的类型等参数,详见<DM8168环境搭建> 1.进入<DVR_RDK_BASE>/dvr_rdk目录 ma ...

  7. JAVA 反射特性

    1.   反射(概念):程序在运行期可以改变程序结构和变量类型,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力. 2.   反射的特性: •在运行时判断任意一个对象所属的类 •在运行时构造 ...

  8. python manage.py shell之后的一些错误:

    1. 在执行python manage.py shell之后的一些错误: wyl@wyl:~/myobject$ python manage.py shell /usr/lib/python2.7/d ...

  9. BZOJ 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐

    Description The cows are having a picnic! Each of Farmer John's K (1 <= K <= 100) cows is graz ...

  10. Docker日志自动化: ElasticSearch、Logstash、Kibana以及Logspout

    http://www.open-open.com/lib/view/open1432107136989.html