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作的文本留言本的例子(一)
Oct 09 PHP
php目录管理函数小结
Sep 10 PHP
PHP操作Memcache实例介绍
Jun 14 PHP
PHP与javascript实现变量交互的示例代码
Jul 23 PHP
PHP批量删除、清除UTF-8文件BOM头的代码实例
Apr 14 PHP
php操作XML、读取数据和写入数据的实现代码
Aug 15 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
Jan 05 PHP
Thinkphp和onethink实现微信支付插件
Apr 13 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
May 19 PHP
PHP使用GD库输出汉字的方法【测试可用】
Nov 10 PHP
CI框架数据库查询缓存优化的方法
Nov 21 PHP
对laravel in 查询的使用方法详解
Oct 09 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
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
PHP中JSON的应用技巧
2015/10/10 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
jquery attr 设定src中含有&amp;(宏)符号问题的解决方法
2011/07/26 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
Javascript实现重力弹跳拖拽运动效果示例
2013/06/28 Javascript
js确认删除对话框效果的示例代码
2014/02/20 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
2014/05/10 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
vue写h5页面的方法总结
2019/02/12 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
2019/04/24 Javascript
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
Python表示矩阵的方法分析
2017/05/26 Python
python字典DICT类型合并详解
2017/08/17 Python
python下载文件记录黑名单的实现代码
2017/10/24 Python
python批量替换多文件字符串问题详解
2018/04/22 Python
pycham查看程序执行的时间方法
2018/11/29 Python
对python使用telnet实现弱密码登录的方法详解
2019/01/26 Python
Python比较配置文件的方法实例详解
2019/06/06 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
深深扎根运动世界的生活品牌:Tillys
2017/10/30 全球购物
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
供货协议书范本
2014/04/22 职场文书
八达岭长城导游词
2015/01/30 职场文书
ktv服务员岗位职责
2015/02/09 职场文书
2015年测量员工作总结
2015/05/23 职场文书
海上钢琴师的观后感
2015/06/11 职场文书
JS ES6异步解决方案
2021/04/29 Javascript
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL
vue+element ui实现锚点定位
2021/06/29 Vue.js
Golang Web 框架Iris安装部署
2022/08/14 Python