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 邮件发送问题解决
Mar 22 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
May 12 PHP
php获取文章上一页与下一页的方法
Dec 01 PHP
PHP中使用正则表达式提取中文实现笔记
Jan 20 PHP
PHP和C#可共用的可逆加密算法详解
Oct 26 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
Jan 07 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
Jan 14 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
Jul 08 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
thinkPHP5框架设置404、403等http状态页面的方法
Jun 05 PHP
Laravel框架文件上传功能实现方法示例
Apr 16 PHP
laravel执行php artisan migrate报错的解决方法
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去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
解析PHP高效率写法(详解原因)
2013/06/20 PHP
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
PHP网络操作函数汇总
2015/05/18 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
PHP基于swoole多进程操作示例
2019/08/12 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
jquery 插件学习(二)
2012/08/06 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
js编写贪吃蛇的小游戏
2020/08/24 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
详解使用angular-cli发布i18n多国语言Angular应用
2017/05/20 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
2018/02/11 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
微信小程序实现的动态设置导航栏标题功能示例
2019/01/31 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
python中报错&quot;json.decoder.JSONDecodeError: Expecting value:&quot;的解决
2019/04/29 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
2020/01/10 Python
win10从零安装配置pytorch全过程图文详解
2020/05/08 Python
Python中格式化字符串的四种实现
2020/05/26 Python
CSS3 3D制作实战案例分析
2016/09/18 HTML / CSS
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
如何客观的进行自我评价
2013/12/17 职场文书
银行批评与自我批评
2014/02/10 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
2015教师个人师德工作总结
2015/10/23 职场文书
52条SQL语句教你性能优化
2021/05/25 MySQL
pandas中DataFrame检测重复值的实现
2021/05/26 Python
Vue2项目中对百度地图的封装使用详解
2022/06/16 Vue.js