php实现可逆加密的方法


Posted in PHP onAugust 11, 2015

本文实例讲述了php实现可逆加密的方法。分享给大家供大家参考。具体如下:

这里介绍的可以逆转加密类,没有密钥很难破解。

PHP代码如下:

<?php
class encryptCalss
{
var $key=12;
function encode($txt){
for($i=0;$i<strlen($txt);$i++){
$txt[$i]=chr(ord($txt[$i])+$this->key);
}
return $txt=urlencode(base64_encode(urlencode($txt)));
}
function decode($txt){
$txt=urldecode(base64_decode($txt));
for($i=0;$i<strlen($txt);$i++){
$txt[$i]=chr(ord($txt[$i])-$this->key);
}
return $txt;
}
}
?>

discuz加密解密:

<?php
/**
 * 
 * @param string $string 原文或者密文
 * @param string $operation 操作(ENCODE | DECODE), 默认为 DECODE
 * @param string $key 密钥
 * @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效
 * @return string 处理后的 原文或者 经过 base64_encode 处理后的密文
 * @example 
 *  $a = authcode('abc', 'ENCODE', 'key');
 *  $b = authcode($a, 'DECODE', 'key'); // $b(abc)
 * 
 *  $a = authcode('abc', 'ENCODE', 'key', 3600);
 *  $b = authcode('abc', 'DECODE', 'key'); // 在一个小时内,$b(abc),否则 $b 为空
 */
function authcode($string,$operation='DECODE',$key='',$expiry=0){
  $ckey_length=4;
  $key=md5($key ? $key:"kalvin.cn");
  $keya=md5(substr($key,0,16));
  $keyb=md5(substr($key,16,16));
  $keyc=$ckey_length ? ($operation=='DECODE' ? substr($string,0,$ckey_length):substr(md5(microtime()),-$ckey_length)):'';
  $cryptkey=$keya.md5($keya.$keyc);
  $key_length=strlen($cryptkey);
  $string=$operation=='DECODE' ? base64_decode(substr($string,$ckey_length)):sprintf('%010d',$expiry ? $expiry+time():0).substr(md5($string.$keyb),0,16).$string;
  $string_length=strlen($string);
  $result='';
  $box=range(0,255);
  $rndkey=array();
  for($i=0;$i<=255;$i++){
    $rndkey[$i]=ord($cryptkey[$i%$key_length]);
  }
  for($j=$i=0;$i<256;$i++){
    $j=($j+$box[$i]+$rndkey[$i])%256;
    $tmp=$box[$i];
    $box[$i]=$box[$j];
    $box[$j]=$tmp;
  }
  for($a=$j=$i=0;$i<$string_length;$i++){
    $a=($a+1)%256;
    $j=($j+$box[$a])%256;
    $tmp=$box[$a];
    $box[$a]=$box[$j];
    $box[$j]=$tmp;
    $result.=chr(ord($string[$i]) ^ ($box[($box[$a]+$box[$j])%256]));
  }
  if($operation=='DECODE'){
    if((substr($result,0,10)==0||substr($result,0,10)-time()>0)&&substr($result,10,16)==substr(md5(substr($result,26).$keyb),0,16)){
      returnsubstr($result,26);
    }else{
      return'';
    }
  }else{
    return $keyc.str_replace('=','',base64_encode($result));
  }
}
?>

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
国外PHP程序员的13个好习惯小结
Feb 20 PHP
深入phpMyAdmin的安装与配置的详细步骤
May 07 PHP
PHP中isset()和unset()函数的用法小结
Mar 11 PHP
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
Apr 24 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
PHP中strtr字符串替换用法详解
Nov 26 PHP
基于PHP实现短信验证码接口(容联运通讯)
Sep 06 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
Dec 28 PHP
PHP PDOStatement::bindParam讲解
Jan 30 PHP
YII框架关联查询操作示例
Apr 29 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
May 06 PHP
PHP中用Trait封装单例模式的实现
Dec 18 PHP
PHP实现获取某个月份周次信息的方法
Aug 11 #PHP
PHP实现删除字符串中任何字符的函数
Aug 11 #PHP
详解php的socket通信
Aug 11 #PHP
Java中final关键字详解
Aug 10 #PHP
php生成二维码
Aug 10 #PHP
PHP的文件操作与算法实现的面试题示例
Aug 10 #PHP
PHP的关于变量和日期处理的一些面试题目整理
Aug 10 #PHP
You might like
zend框架实现支持sql server的操作方法
2016/12/08 PHP
CodeIgniter框架数据库基本操作示例
2018/05/24 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
JavaScript 入门·JavaScript 具有全范围的运算符
2007/10/01 Javascript
用JS剩余字数计算的代码
2008/07/03 Javascript
QUnit jQuery的TDD框架
2010/11/04 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
用v-html解决Vue.js渲染中html标签不被解析的问题
2016/12/14 Javascript
基于javascript实现最简单选项卡切换
2017/02/01 Javascript
JavaScript+CSS相册特效实例代码
2017/09/07 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
2018/08/31 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
python使用cookielib库示例分享
2014/03/03 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
python实现列表的排序方法分享
2019/07/01 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
python 字符串常用方法汇总详解
2019/09/16 Python
如何在python中执行另一个py文件
2020/04/30 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
pytorch 限制GPU使用效率详解(计算效率)
2020/06/27 Python
django中cookiecutter的使用教程
2020/12/03 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
构造方法和其他方法的区别
2016/04/26 面试题
大二自我鉴定
2014/01/31 职场文书
给校长的建议书400字
2014/05/15 职场文书
自荐信格式模板
2015/03/27 职场文书
《乘法分配律》教学反思
2016/02/24 职场文书
Redis分布式锁的7种实现
2022/04/01 Redis