PHP加密解密类实例分析

这篇文章主要介绍了PHP加密解密类,实例分析了php实现加密与解密的原理与相关技巧,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了PHP加密解密类。分享给大家供大家参考。具体分析如下:

这段代码支持 数组加密 , 密文有效期, 各种对称加密

其中参数如下:

* @use ption::en($string, $key);

* @param String $string 需要加密的字串

* @param String $skey 密钥

* @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效

* @return String

1. php代码如下:

  1. /*
  2. * -工具库-加密解密码
  3. */
  4. class ption
  5. {
  6. private static $original = array('=', '+', '/');
  7. private static $later = array('O0O0O', 'o0O0o', 'oo00o');
  8. function __construct()
  9. {
  10. }
  11. private static function md5($skey = '')
  12. {
  13. $skey = $skey ? $skey : 'ui' ; //uicms::_config('security/authkey');
  14. return md5(substr($skey, 0, 16));
  15. }
  16. /**
  17. * @use ption::en($string, $key);
  18. * @param String $string 需要加密的字串
  19. * @param String $skey 密钥
  20. * @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效
  21. * @return String
  22. */
  23. static public function en($string = '', $skey = '', $expiry=0)
  24. {
  25. if( is_array( $string ) )
  26. {
  27. $string = json_encode($string); // uicms::json($string, true, 'en');
  28. }
  29. $string = str_pad($expiry ? $expiry + TIME : 0, 10, 0).$string;
  30. $strArr = str_split(base64_encode($string));
  31. $strCount = count($strArr);
  32. $skey = static::md5($skey);
  33. foreach (str_split($skey) as $key => $value)
  34. {
  35. $key < $strCount && $strArr[$key].=$value;
  36. }
  37. return str_replace(self::$original, self::$later, join('', $strArr));
  38. }
  39. /**
  40. * @use ption::de($string, $key);
  41. * @param String $string 需要解密的字串
  42. * @param String $skey 密钥
  43. * @return String
  44. */
  45. static public function de($string = '', $skey = '')
  46. {
  47. $strArr = str_split(str_replace(self::$later,self::$original,$string),2);
  48. $strCount = count($strArr);
  49. $skey = static::md5($skey);
  50. foreach (str_split($skey) as $key => $value)
  51. {
  52. $key < $strCount && $strArr[$key][1] === $value && $strArr[$key] = $strArr[$key][0];
  53. }
  54. $result = base64_decode(join('', $strArr));
  55. if(substr($result, 0, 10) == 0 || substr($result, 0, 10) - TIME > 0)
  56. {
  57. return substr($result, 10);
  58. }
  59. else
  60. {
  61. return false;
  62. }
  63. }
  64. }

2. 用法如下:

  1. $str['username'] = 'oschina';
  2. $str['pw'] = '123456';
  3. $str['huoxin'] = '!@#$%^&';
  4. echo "string : " . $str . " <br />";
  5. echo "encode : " . ($enstring = ption::en($str)) . '<br />';
  6. echo "decode : " . ption::de($enstring);