PageRenderTime 46ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/Framework/System/Crypt/Driver/Crypt.class.php

https://github.com/lewisliud/DreamPHP
PHP | 96 lines | 57 code | 4 blank | 35 comment | 9 complexity | 16c3c6a7b8cfea2a8879b04823a1bf21 MD5 | raw file
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2009 http://thinkphp.cn All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
  8. // +----------------------------------------------------------------------
  9. // | Author: liu21st <liu21st@gmail.com>
  10. // +----------------------------------------------------------------------
  11. namespace Think\Crypt\Driver;
  12. /**
  13. * Crypt 加密实现类
  14. * @category ORG
  15. * @package ORG
  16. * @subpackage Crypt
  17. * @author liu21st <liu21st@gmail.com>
  18. */
  19. class Crypt {
  20. /**
  21. * 加密字符串
  22. *
  23. * @static
  24. * @access public
  25. * @param string $str 字符串
  26. * @param string $key 加密key
  27. * @param integer $expire 有效期(秒)
  28. * @return string 加密后的密文
  29. */
  30. public static function encrypt($str, $key, $expire = 0)
  31. {
  32. $expire = sprintf('%010d', $expire ? $expire + time() : 0);
  33. $r = md5($key);
  34. $c=0;
  35. $v = "";
  36. $str = $expire.$str;
  37. $len = strlen($str);
  38. $l = strlen($r);
  39. for ($i = 0; $i < $len; $i++)
  40. {
  41. if ($c == $l) $c = 0;
  42. $v.= substr($r, $c, 1) .
  43. (substr($str, $i, 1) ^ substr($r, $c, 1));
  44. $c++;
  45. }
  46. return self::ed($v, $key);
  47. }
  48. /**
  49. * 解密字符串
  50. *
  51. * @static
  52. * @access public
  53. * @param string $str 字符串
  54. * @param string $key 加密key
  55. * @return string 解密后的明文
  56. */
  57. public static function decrypt($str, $key)
  58. {
  59. $str = self::ed($str, $key);
  60. $v = "";
  61. $len = strlen($str);
  62. for ($i = 0; $i < $len; $i++)
  63. {
  64. $md5 = substr($str, $i, 1);
  65. $i++;
  66. $v .= (substr($str, $i, 1) ^ $md5);
  67. }
  68. $data = $v;
  69. $expire = substr($data, 0, 10);
  70. if ($expire > 0 && $expire < time())
  71. {
  72. return '';
  73. }
  74. $data = substr($data, 10);
  75. return $data;
  76. }
  77. function ed($str, $key)
  78. {
  79. $r = md5($key);
  80. $c=0;
  81. $v = "";
  82. $len = strlen($str);
  83. $l = strlen($r);
  84. for ($i = 0; $i < $len; $i++)
  85. {
  86. if ($c == $l) $c = 0;
  87. $v.= substr($str, $i, 1) ^ substr($r, $c, 1);
  88. $c++;
  89. }
  90. return $v;
  91. }
  92. }