请选择 进入手机版 | 继续访问电脑版

爱分享吧

 找回密码
 立即注册11
搜索
热搜: 活动 交友 discuz
查看: 1966|回复: 0

php加密解密(有密钥才能解开加密数据)

[复制链接]

75

主题

75

帖子

1264

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1264
发表于 2018-5-23 14:28:26 | 显示全部楼层 |阅读模式
拿去不谢!

  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 加密解密(根据base64加密解密原理封装,有密钥才能解开加密数据)
  4. // +----------------------------------------------------------------------
  5. header('Content-type:text/html; charset=utf-8');

  6. class encrypt {
  7.     public static $secretKey = 'RongkaiYang';//密钥
  8.     public static $expire;//过期时间 单位秒
  9.     public static $string;
  10.     protected static $table = [
  11.         'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
  12.         'I', 'J', 'K', 'L', 'M', 'N', 'O' ,'P',
  13.         'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
  14.         'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
  15.         'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
  16.         'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
  17.         'w', 'x', 'y', 'z', '0', '1', '2', '3',
  18.         '4', '5', '6', '7', '8', '9', '+', '/'
  19.     ];

  20.     /**
  21.      * 初始化检查设置
  22.      * @param string $string  需要加密、解密的字符串
  23.      * @param string $secretKey  密钥
  24.      * @return bool
  25.      */
  26.     public static function init($string = '', $secretKey = ''){
  27.         if(!empty($string) && is_string($string))
  28.             self::$string = $string;
  29.         
  30.         if(empty(self::$string)){
  31.             return false;
  32.         }

  33.         if(!empty($secretKey) && is_string($secretKey))
  34.             self::$secretKey = $secretKey;
  35.         return true;
  36.     }

  37.     /**
  38.      * 解密
  39.      * @param string $string 加密密文
  40.      * @param string $secretKey 密钥
  41.      * @return bool|string
  42.      */
  43.     public static function deCode($string = '', $secretKey = ''){
  44.         if(!self::init($string, $secretKey))
  45.             return false;
  46.         $decodeString = base64_decode(self::encryption(self::$string));
  47.         $createTime = hexdec(substr($decodeString, 32, 8));
  48.         if(!empty(self::$expire) && (time() - $createTime > self::$expire)){
  49.             return false;
  50.         }
  51.         return substr($decodeString, 40);
  52.     }

  53.     /**
  54.      * 加密
  55.      * @param string $string 需要加密的字符串
  56.      * @param string $secretKey 密钥
  57.      * @return bool|string
  58.      */
  59.     public static function enCode($string = '', $secretKey = ''){
  60.         if(!self::init($string, $secretKey))
  61.             return false;
  62.         return self::encryption(base64_encode(md5(time()).dechex(time()).self::$string));
  63.     }

  64.     /**
  65.      * 加密解密算法
  66.      * @param $string 需要处理的字符串
  67.      * @return string
  68.      */
  69.     public static function encryption($string){
  70.         $tableFlip = array_flip(self::$table);
  71.         $string = rtrim($string, '=');
  72.         $stringLen = strlen($string);
  73.         $secretKey = rtrim(base64_encode(self::$secretKey), '=');
  74.         $secretKeyLen = strlen($secretKey);
  75.         $encryptString = '';
  76.         for ($i = 0; $i < $stringLen; $i++) {
  77.             $key = $tableFlip[$secretKey[$i % $secretKeyLen]];
  78.             $sOrd = $tableFlip[$string[$i]];
  79.             $encrypt = $key ^ $sOrd;
  80.             $encryptString .= self::$table[$encrypt];
  81.         }
  82.         return $encryptString;
  83.     }
  84. }

  85. $str = '豫章故郡,洪都新府。星分翼轸,地接衡庐。襟三江而带五湖,控蛮荆而引瓯越。物华天宝,龙光射牛斗之墟;人杰地灵,徐孺下陈蕃之榻。雄州雾列,俊采星驰。台隍枕夷夏之交,宾主尽东南之美。都督阎公之雅望,棨戟遥临;宇文新州之懿范,襜帷暂驻。十旬休假,胜友如云;千里逢迎,高朋满座。腾蛟起凤,孟学士之词宗;紫电青霜,王将军之武库。家君作宰,路出名区;童子何知,躬逢胜饯。';

  86. $str2 = '中国人!上午好,风轻云淡。';
  87. //encrypt::init('中国人!上午好,风轻云淡。');

  88. $start = microtime(true);
  89. echo base64_encode($str);
  90. echo '<hr>';
  91. encrypt::init($str, '123456');
  92. echo $encodeString = encrypt::enCode();
  93. echo '<hr>';
  94. //encrypt::init($encodeString);
  95. echo encrypt::deCode($encodeString);

  96. $end = microtime(true);
  97. echo '<hr>';

  98. echo $end - $start;
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册11

本版积分规则

Archiver|手机版|小黑屋|爱分享吧

GMT+8, 2021-12-8 02:51 , Processed in 0.056869 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表