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 Mysql编程之高级技巧
Aug 27 PHP
在命令行下运行PHP脚本[带参数]的方法
Jan 22 PHP
php ftp文件上传函数(基础版)
Jun 03 PHP
PHP 日,周,月点击排行统计
Jan 11 PHP
php读取csv文件并输出的方法
Mar 14 PHP
CI框架无限级分类+递归的实现代码
Nov 01 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
Mar 12 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
Jun 13 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
Jun 17 PHP
php设计模式之职责链模式定义与用法经典示例
Sep 19 PHP
PHP架构及原理知识点详解
Dec 22 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
S900/ ETON E1-XM 收音机
2021/03/02 无线电
PHP 正则表达式常用函数
2014/08/17 PHP
smarty内置函数section的用法
2015/01/22 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
2016/08/23 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
FF IE兼容性的修改小结
2009/09/02 Javascript
JQuery 1.6发布 性能提升,同时包含大量破坏性变更
2011/05/10 Javascript
javascript中parentNode,childNodes,children的应用详解
2013/12/17 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
JavaScript中常见的字符串操作函数及用法汇总
2015/05/04 Javascript
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
js实现的黑背景灰色二级导航菜单效果代码
2015/08/24 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
js实现横向拖拽导航条功能
2017/02/17 Javascript
关于axios返回空对象的问题解决
2017/04/04 Javascript
jQuery返回定位插件详解
2017/05/15 jQuery
JS实现留言板功能
2017/06/17 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
webpack构建换肤功能的思路详解
2017/11/27 Javascript
jQuery中库的引用方法
2018/01/06 jQuery
微信小程序列表中item左滑删除功能
2018/11/07 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
python利用datetime模块计算时间差
2015/08/04 Python
Python实现的单向循环链表功能示例
2017/11/10 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
Python 类的魔法属性用法实例分析
2019/11/21 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
Python如何定义有默认参数的函数
2020/08/10 Python
html5时钟实现代码
2010/10/22 HTML / CSS
俄罗斯茶和咖啡网上商店:Tea.ru
2021/01/26 全球购物
英语教育专业自荐信
2014/05/29 职场文书
校外活动方案
2014/08/28 职场文书
信息与工商管理职业规划范文:为梦想而搏击
2014/09/11 职场文书
优秀新员工事迹材料
2019/05/13 职场文书