zoukankan      html  css  js  c++  java
  • php 可逆的加密算法

    代码:

     1 <?php
     2 
     3 class Test {
     4 
     5     private $authCodeKey = 'khUvFB9pijNyCYMGZdzqeKalyg7dh';    
     6 
     7     function authCode($input, $key) {
     8 
     9         # Input must be of even length.
    10         if (strlen($input) % 2) {
    11             //$input .= '0';
    12         }
    13 
    14         # Keys longer than the input will be truncated.
    15         if (strlen($key) > strlen($input)) {
    16             $key = substr($key, 0, strlen($input));
    17         }
    18 
    19         # Keys shorter than the input will be padded.
    20         if (strlen($key) < strlen($input)) {
    21             $key = str_pad($key, strlen($input), '0', STR_PAD_RIGHT);
    22         }
    23 
    24         # Now the key and input are the same length.
    25         # Zero is used for any trailing padding required.
    26 
    27         # Simple XOR'ing, each input byte with each key byte.
    28         $result = '';
    29         for ($i = 0; $i < strlen($input); $i++) {
    30             $result .= $input{$i} ^ $key{$i};
    31         }
    32         return $result;
    33     }
    34 
    35     /**
    36      * 加密
    37      */
    38     function encrypt($sessionId) {
    39 
    40         $hashKey = $this->base64url_encode($this->authCode($sessionId, $this->authCodeKey));
    41         $hashKey = $this->base64url_encode($sessionId);
    42         return $hashKey;
    43     }
    44 
    45 
    46     /**
    47      * 解密
    48      */
    49     function decrypt($hashKey) {
    50 
    51         $authCodeKey = 'khUvFB9pijNyCYMGZdzqeKalyg7dh';
    52         $sessionId = $this->authCode($this->base64url_decode($hashKey), $this->authCodeKey);
    53         $sessionId = $this->base64url_decode($hashKey);
    54         return $sessionId;
    55     }
    56 
    57     // url传输需要替换部分字符
    58     function base64url_encode($data) {
    59         return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
    60     }
    61     // url传输需要替换部分字符
    62     function base64url_decode($data) {
    63         return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
    64     }
    65 }

    测试代码:

     1 $uId = 'gouge';
     2 $signKey = 'gouge-test123';
     3 $timestamp = time();
     4 
     5 // 需要加密的值 根据实际情况添加
     6 $signParam = array($uId, $timestamp, $signKey);
     7 $sessionId = implode(',', $signParam);
     8 
     9 $e = new Test();
    10 // 加密
    11 $r = $e->encrypt($sessionId);
    12 // 解密
    13 $t = $e->decrypt($r);
    14 
    15 echo $r;
    16 echo "<br/>";
    17 echo $t;

    输出结果:

    1、加密   =》Z291Z2UsMTQ5ODc5NTMxNixnb3VnZS10ZXN0MTIz

    2、解密   =》gouge,1498795316,gouge-test123

  • 相关阅读:
    数据可视化之 图表篇(七)柱形图
    数据可视化之 图表篇(六)桑基图
    数据可视化之 图表篇(五) PowerBI图表不够炫酷?来看看这个
    数据可视化之 图表篇(四) 那些精美的Power BI可视化图表
    数据可视化之 图表篇(三)体验Power BI最新发布的AI图表:分解树
    数据可视化之 图表篇(二)如何用Power BI制作疫情地图?
    数据可视化之 图表篇(一)Power BI可视化,几张图表认识疫情现状
    MCMC随机采样
    Linux中的计划作业
    Linux进程
  • 原文地址:https://www.cnblogs.com/gouge/p/7098244.html
Copyright © 2011-2022 走看看