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安装为Apache DSO
Oct 09 PHP
PHP4引用文件语句的对比
Oct 09 PHP
UCenter Home二次开发指南
May 28 PHP
破解.net程序(dll文件)编译和反编译方法
Jan 31 PHP
php用正则表达式匹配中文实例详解
Nov 06 PHP
php 根据url自动生成缩略图并处理高并发问题
Jan 23 PHP
Thinkphp中数据按分类嵌套循环实现方法
Oct 30 PHP
PHP实现一维数组转二维数组的方法
Feb 25 PHP
检测codeigniter脚本消耗内存情况的方法
Mar 21 PHP
适用于初学者的简易PHP文件上传类
Oct 29 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
Laravel 实现密码重置功能
Feb 23 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下使用SMTP发邮件的代码
2008/01/10 PHP
php实现的简单压缩英文字符串的代码
2008/04/24 PHP
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
php将日期格式转换成xx天前的格式
2015/04/16 PHP
php比较相似字符串的方法
2015/06/05 PHP
php中static和const关键字用法分析
2016/12/07 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
jquery绑定事件不生效的解决方法
2014/02/11 Javascript
node.js require() 源码解读
2015/12/13 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
JavaScript实现移动端带transition动画的轮播效果
2020/03/24 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
python学习手册中的python多态示例代码
2014/01/21 Python
Python 描述符(Descriptor)入门
2016/11/20 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2019/02/12 Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
2019/07/23 Python
pygame实现烟雨蒙蒙下彩虹雨
2019/11/11 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
详解Python IO口多路复用
2020/06/17 Python
银行自荐信范文
2013/10/07 职场文书
会计主管岗位职责
2014/01/03 职场文书
企业总经理岗位职责
2014/02/13 职场文书
十佳标兵事迹材料
2014/08/18 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书
如何写一份成功的商业计划书
2019/06/25 职场文书
CSS3 制作的图片滚动效果
2021/04/14 HTML / CSS
Python自然语言处理之切分算法详解
2021/04/25 Python
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python
Java中的Kotlin 内部类原理
2022/06/16 Java/Android