代码:

 <?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. css 隐藏html元素的方法

    1.常见方法 display:none 这个方法的问题是 元素被隐藏了 同时该元素不占位置了,应该也可以说该元素没有高度和宽度了 2.常见方法 visibility: hidden; 这个方法和dis ...

  2. Net.Core导入EXCel文件里的数据

    1.前台的表单: <form enctype="multipart/form-data" method="post" id="inportFil ...

  3. Android按钮单击事件处理的几种方法(Android学习笔记)

    方法一:匿名内部类实现按钮事件处理 this.btnButton=(Button)super.findViewById(R.id.mybtn); this.btnButton.setOnClickLi ...

  4. 【LeetCode每天一题】Remove Duplicates from Sorted List(移除有序链表中的重复数字)

    Given a sorted linked list, delete all duplicates such that each element appear only once. Example 1 ...

  5. tomcat - 认识

    tomcat - web应用服务器 环境:ubuntu测试 @shell命令(cd到tomcat目录下) 启动: ./bin  startup.sh 关闭:./bin  shutdown.sh @部署 ...

  6. ASP.NET-GridView之固定表数据滚动

    有时候,在线Web开发时,需要显示的数据往往会超过我们规定的表格长度,所以为了方便显示大量数据,为了美观,这里提出了两种显示数据方式. ①可以滚动显示数据但是表头未能获取 效果显示 前端DEMO &l ...

  7. CI框架定义判断POST GET AJAX

    CI框架当中并没有提供,类似tp框架中IS_POST,IS_AJAX,IS_GET的方法. 所有就得我们自己造轮子了.下面就介绍一下,如何定义这些判断请求的方法.其实很简单的. 首先打开constan ...

  8. ubuntu不能自windows拖拽文件解决办法

    由虚拟机的安装更新所致,及时安装更新vmware  tools 命令:tar -xzvf VMwareTools-10.0.6-3595377.tar.gz进入解压后的目录,执行:sudo ./wmw ...

  9. Spring注解实现定时功能以及Quartz定时器

    一:Spring注解实现--------->Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz 1:maven配置: <!-- quartz--> <d ...

  10. 使用npm发布自己的包

    记录一下大概步骤: 去npm官网注册一个账号 在文件夹下执行npm init 创建 package.json 执行 npm login,并根据提示输入你的npm账号,密码,和邮箱 执行 npm pub ...