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

时间: 2024-11-13 18:08:56

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

对称与非对称和可逆不可逆加密算法总结

记得之前考软考和最近考试,总是出现加密算法的题目,在这里总结一下. 对称与非对称和可逆不可逆加密算法总结: 根据密钥类型不同可以将现代密码技术分为两类:对称加密算法(私钥密码体系)和非对称加密算法(公钥密码体系). 1 对称加密算法中,数据加密和解密采用的都是同一个密钥,因而其安全性依赖于所持有密钥的安全性. 对称加密算法的主要优点是加密和解密速度快,加密强度高,且算法公开. 缺点是实现密钥的秘密分发困难,在大量用户的情况下密钥管理复杂,而且无法完成身份认证等功能,不便于应用在网络开放的环境中.

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

程序中使用了.properties文件作为参数配置文档,好处是灵活配置各项参数 一旦对数据库的一些参数进行了配置,势必涉及数据库的IP,端口,用户名和密码 properties文件全是unicode编码明文存储,程序打包交付后,其他人能够很容易使用解压软件打开jar查看你的.properties文件 所以一些敏感变量需要加密处理 首先需要了解一些基本的加密算法,比如MD5,比如DES和RSA MD5是一种不可逆的加密算法,使用散列后特征码的方式表现需要加密的字符或者文件,常用在系统登陆的密码比对

MD5解密与加密算法

http://md5.tellyou.top/default.html public class MD5andKL { // MD5加码.32位    public static String MD5(String inStr) {        MessageDigest md5 = null;        try {            md5 = MessageDigest.getInstance("MD5");        } catch (Exception e) { 

[转载]加密算法库Crypto——nodejs中间件系列

从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏览器就基于V8,同时打开20-30个网页都很流畅.Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低.非常适合小型网站,个性化网站,我们自己的Geek网站!! 关于作者 张丹(Conan), 创业者,程序员(Java,R,Jav

php防止用户重复提交表单

我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦. 效果图: 那么如何规避这中重复提交表单的现象出现呢?我们可以从很多方面入手: 首先从前端做限制.前端JavaScript在按钮被点击一次后禁用,即disabled,这个方法简单的防止了多次点击提交按钮,但是缺点是如果用户禁用了javascript脚本则失效. 第二,我们可以在提交后做redirect页面重定向,

md5的一些用法

package md5; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /* * MD5 算法 */ public class MD5 { // 全局数组 private final static String[] strDigits = { "0", "1", "2", "3", "4"

手机加密那点事儿_数值内存加密

本文章讲述利用cocos2d-x 开发手机游戏的一些加密心得.如有问题,请多指正. 更多信息详见:http://blog.csdn.net/chengyingzhilian/article/details/25540441 本文地址:http://blog.csdn.net/chengyingzhilian/article/details/25957895 好了,进入本文的主题--数据加密: 要将数据加密,不得不提的一款神器:八门神器.手机游戏中的金手指. 八门神器是安卓.iOS.塞班平台上通用

[转] iOS应用架构谈 网络层设计方案

原文地址:http://casatwy.com/iosying-yong-jia-gou-tan-wang-luo-ceng-she-ji-fang-an.html iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方案 iOS应用架构谈 动态部署方案 iOS应用架构谈 本地持久化方案 前言 网络层在一个App中也是一个不可缺少的部分,工程师们在网络层能够发挥的空间也比较大.另外,苹果对网络请求部分已经做了很好的封装,业界的AFNetworking

MD5的加密和解密(总结)

效果图如下: package com.test; import java.security.MessageDigest; public class MD5 { // MD5加码.32位 public static String MD5(String inStr) { MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("MD5"); } catch (Exception e) { System.out.prin