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 相关文章推荐
第二节--PHP5 的对象模型
Nov 16 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
Jan 16 PHP
PHP中设置时区方法小结
Jun 03 PHP
PHP中的Memcache详解
Apr 05 PHP
PH P5.2至5.5、5.6的新增功能详解
Jul 14 PHP
yii实现图片上传及缩略图生成的方法
Dec 04 PHP
php实现的Curl封装类Curl.class.php用法实例分析
Sep 25 PHP
php socket通信(tcp/udp)实例分析
Feb 14 PHP
ThinkPHP打水印及设置水印位置的方法
Oct 14 PHP
Eclipse PHPEclipse 配置的具体步骤
Aug 08 PHP
PHP的mysqli_rollback()函数讲解
Jan 23 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 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中的正规表达式(二)
2006/10/09 PHP
MYSQL环境变量设置方法
2007/01/15 PHP
国外比较好的几个的Php开源建站平台小结
2010/04/22 PHP
用PHP实现递归循环每一个目录
2010/08/08 PHP
php使用wordwrap格式化文本段落的方法
2015/03/17 PHP
php中switch语句用法详解
2015/08/17 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
PHP laravel中的多对多关系实例详解
2017/06/07 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
JavaScript原型继承之基础机制分析
2011/08/26 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
浅谈jQuery操作类数组的工具方法
2016/12/23 Javascript
详解express与koa中间件模式对比
2017/08/07 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
JS实现盒子拖拽效果
2020/02/06 Javascript
Vue中使用better-scroll实现轮播图组件
2020/03/07 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
实例分析python3实现并发访问水平切分表
2018/09/29 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
2019/09/20 Python
python画图常规设置方式
2020/03/05 Python
浅谈Python 参数与变量
2020/06/20 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
html5+svg学习指南之SVG基础知识
2014/12/17 HTML / CSS
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
应届毕业生应聘自荐信范文
2014/02/26 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
项目建议书模板
2014/05/12 职场文书
2019年员工晋升管理制度范本!
2019/07/08 职场文书