代码:

 <?php

 class Test {

     private $authCodeKey = 'khUvFB9pijNyCYMGZdzqeKalyg7dh';    

     function authCode($input, $key) {

         # Input must be of even length.
if (strlen($input) % 2) {
//$input .= '0';
} # Keys longer than the input will be truncated.
if (strlen($key) > strlen($input)) {
$key = substr($key, 0, strlen($input));
} # Keys shorter than the input will be padded.
if (strlen($key) < strlen($input)) {
$key = str_pad($key, strlen($input), '0', STR_PAD_RIGHT);
} # Now the key and input are the same length.
# Zero is used for any trailing padding required. # Simple XOR'ing, each input byte with each key byte.
$result = '';
for ($i = 0; $i < strlen($input); $i++) {
$result .= $input{$i} ^ $key{$i};
}
return $result;
} /**
* 加密
*/
function encrypt($sessionId) { $hashKey = $this->base64url_encode($this->authCode($sessionId, $this->authCodeKey));
$hashKey = $this->base64url_encode($sessionId);
return $hashKey;
} /**
* 解密
*/
function decrypt($hashKey) { $authCodeKey = 'khUvFB9pijNyCYMGZdzqeKalyg7dh';
$sessionId = $this->authCode($this->base64url_decode($hashKey), $this->authCodeKey);
$sessionId = $this->base64url_decode($hashKey);
return $sessionId;
} // url传输需要替换部分字符
function base64url_encode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
// url传输需要替换部分字符
function base64url_decode($data) {
return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
}
}

测试代码:

 $uId = 'gouge';
$signKey = 'gouge-test123';
$timestamp = time(); // 需要加密的值 根据实际情况添加
$signParam = array($uId, $timestamp, $signKey);
$sessionId = implode(',', $signParam); $e = new Test();
// 加密
$r = $e->encrypt($sessionId);
// 解密
$t = $e->decrypt($r); echo $r;
echo "<br/>";
echo $t;

输出结果:

1、加密   =》Z291Z2UsMTQ5ODc5NTMxNixnb3VnZS10ZXN0MTIz

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

php 可逆的加密算法的更多相关文章

  1. JAVA使用DES加密算法加密解密

    程序中使用了.properties文件作为参数配置文档,好处是灵活配置各项参数 一旦对数据库的一些参数进行了配置,势必涉及数据库的IP,端口,用户名和密码 properties文件全是unicode编 ...

  2. MySQL加密算法

    1.不可逆加密: PASSWORD(),ENCRYPT(,),MD5(),SHA5(). 2.可逆的加密算法: ENCODE(,)   DECODE(,):加密解密字符串.该函数有两个参数:被加密或解 ...

  3. java加密算法-MD5

    import java.security.MessageDigest; public class MD5Util { /*** * MD5加密 生成32位md5码 * @param 待加密字符串 * ...

  4. android MD5加密

    public class MD5Uutils {    //MD5加密,32位    public static String MD5(String str) {        MessageDige ...

  5. [Android]加密技术

    对称加密无论是加密还是解密都使用同一个key,而非对称加密需要两个key(public key和private key).使用public key对数据进行加密,必须使用private key对数据进 ...

  6. nodejs随记02

    Basic认证 检查报文头中Authorization字段,由认证方式和加密值构成: basic认证中,加密值为username:password,然后进行Base64编码构成; 获取username ...

  7. iOS应用架构谈 网络层设计方案

    网络层在一个App中也是一个不可缺少的部分,工程师们在网络层能够发挥的空间也比较大.另外,苹果对网络请求部分已经做了很好的封装,业界的AFNetworking也被广泛使用.其它的ASIHttpRequ ...

  8. PHP防止用户重复提交表单

    我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦. 那么如何规避 ...

  9. md5的一些用法

    package md5; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /* * ...

随机推荐

  1. Python的__getattr__方法学习

    内容部分来自网络 __getattr__函数的作用: 如果属性查找(attribute lookup)在实例以及对应的类中(通过__dict__)失败, 那么会调用到类的__getattr__函数: ...

  2. 利用BIND搭建自己的私有根及授权域

    这篇文章是对之前博客写的DNS的再深一层的搭建,其中包括搭建私有根,还有顶级域以及授权子域,转发域,反向解析等等 上一篇DNS的博客链接:http://www.cnblogs.com/hjc4025/ ...

  3. 最大k乘积

    思路:看到这道题,第一思路就要是动态规划,不要想着用啥暴力或者排列组合,只会搞得很复杂. 动态规划的思路是对这个整数,我们从后向前进行划分k个数字,我们知道对于划分后的最后一个整数,它的位数要保证前面 ...

  4. 识别子串 (string)——后缀自动机+线段树

    题目 [题目描述] 一般地,对于一个字符串 S,和 S 中第 $ i $ 个字符 x,定义子串 $ T=S(i.j) $ 为一个关于 x 的识别子申,当且仅当: 1.$ i \leq x \leq j ...

  5. AP_MergeSql

    ) FROM DELTA.PRMCN WHERE ETL_FLAG IN ('A','D')) S; --重跑:删除已跑入数据 DELETE FROM CCRD.PRMCN WHERE JOB_SEQ ...

  6. 浅谈 关于ARC循环引用得问题

    这段时间在研究关于ARC得循环引用导致变量不能释放,在此先介绍一本书英文书: <Pro Multithreading and Memory Management for iOS and OS X ...

  7. [转载]sscanf函数

    来源:http://c.biancheng.net/cpp/html/296.html 头文件:#include <stdio.h> sscanf()函数用于从字符串中读取指定格式的数据, ...

  8. redis分布式锁的使用

    一  本身自带的方法进行使用: <dependency> <groupId>redis.clients</groupId> <artifactId>je ...

  9. libxml2 安装及使用

    https://gitlab.gnome.org/GNOME/libxml2/ ftp://xmlsoft.org/libxml2/libxml2-2.9.1.tar.gz /configuremak ...

  10. Gym - 101572D Distinctive Character bfs 思维

    题目传送门 题目大意: 给出n个01串,让你构造一个字符串,使这个字符串和这些字符串中相似程度最高 尽可能低.如果两个字符串对应位置相同,则相似程度加一. 思路: 每一个01串更改自己的一部分后,都可 ...