php 可逆的加密算法
代码:
<?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 可逆的加密算法的更多相关文章
- JAVA使用DES加密算法加密解密
程序中使用了.properties文件作为参数配置文档,好处是灵活配置各项参数 一旦对数据库的一些参数进行了配置,势必涉及数据库的IP,端口,用户名和密码 properties文件全是unicode编 ...
- MySQL加密算法
1.不可逆加密: PASSWORD(),ENCRYPT(,),MD5(),SHA5(). 2.可逆的加密算法: ENCODE(,) DECODE(,):加密解密字符串.该函数有两个参数:被加密或解 ...
- java加密算法-MD5
import java.security.MessageDigest; public class MD5Util { /*** * MD5加密 生成32位md5码 * @param 待加密字符串 * ...
- android MD5加密
public class MD5Uutils { //MD5加密,32位 public static String MD5(String str) { MessageDige ...
- [Android]加密技术
对称加密无论是加密还是解密都使用同一个key,而非对称加密需要两个key(public key和private key).使用public key对数据进行加密,必须使用private key对数据进 ...
- nodejs随记02
Basic认证 检查报文头中Authorization字段,由认证方式和加密值构成: basic认证中,加密值为username:password,然后进行Base64编码构成; 获取username ...
- iOS应用架构谈 网络层设计方案
网络层在一个App中也是一个不可缺少的部分,工程师们在网络层能够发挥的空间也比较大.另外,苹果对网络请求部分已经做了很好的封装,业界的AFNetworking也被广泛使用.其它的ASIHttpRequ ...
- PHP防止用户重复提交表单
我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦. 那么如何规避 ...
- md5的一些用法
package md5; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /* * ...
随机推荐
- C#知识点总结系列:3、C#中Delegate和Event以及它们的区别
1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取锁之后因为异常,致锁 ...
- 未能加载文件或程序集“Interop.SQLDMO”或它的某一个依赖项
程序运行没问题,当您配置好IIS后,打开安装向导时出现以下错误信息: 解决办法为:在IIS应用程序池中“启用32位应用程序”, 1,打开IIS应用程序池,选中相应应用程序池,点击右侧“高级设置” 2, ...
- ubuntu配置静态路由
1. #ifconfig 注意 eth0为你要配置的interfase 2. #vi /etc/network/interfaces # This file describes the network ...
- Unity中Awake的执行时间点
https://docs.unity3d.com/ScriptReference/MonoBehaviour.Awake.html 根据官方文档,Awake的实际执行点,应该是对应mono脚本所在物体 ...
- ueditor UEditor的setContent的时候报错
今天在使用UEditor的setContent的时候报错,报错代码如下 TypeError: me.body is undefined 或 Uncaught TypeError: Cannot set ...
- 实现简易Web服务器(c语言)
任务: (1)实现服务器与客户端间的通信. (2)可以实现HTTP请求中的GET方法. (3)提供静态网页浏览功能,如可浏览:HTML页面,无格式文本,常见图像格式等. (4)提供可以传递参数的动态网 ...
- unity网络延迟
using UnityEngine; using System.Collections; public class Test_Ping : MonoBehaviour { public string ...
- 网络模拟工具Clumsy
Clumsy 是一款小巧而功能强大的开源弱网模拟工具,它能在windows平台下人工造成不稳定的网络状况,方便你调试应用程序在极端网络状况下的表现. 你可以选择 clumsy 提供的功能来有目的性的调 ...
- Git分支管理命令
1. 创建新分支 1)创建新仓库 git init git add README.md git commit -m "readme.md" git remote add origi ...
- bzoj1560:[JSOI2009]火星藏宝图(斜率优化)
题目描述 在火星游玩多日,jyy偶然地发现了一张藏宝图.根据藏宝图上说法,宝藏被埋藏在一个巨大的湖里的N个岛上(2<=N<=200,000).为了方便描述,地图把整个湖划分成M行M列(1& ...