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 - Html Transfer Code
Oct 09 PHP
推荐一篇入门级的Class文章
Mar 19 PHP
php 设计模式之 工厂模式
Dec 19 PHP
PHP中header和session_start前不能有输出原因分析
Jan 11 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
Apr 08 PHP
PHPUnit安装及使用示例
Oct 29 PHP
详解PHP序列化反序列化的方法
Oct 27 PHP
通过PHP简单实例介绍文件上传
Dec 16 PHP
PHP文件上传之多文件上传的实现思路
Jan 27 PHP
PHP Class SoapClient not found解决方法
Jan 20 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
Jun 13 PHP
PHP之多条件混合筛选功能的实现方法
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获取Google AJAX Search API 数据的代码
2010/03/12 PHP
PHP实现时间轴函数代码
2011/10/08 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
php字符串函数学习之substr()
2015/03/27 PHP
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
php实现文章置顶功能的方法
2016/10/20 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
php操作mongodb封装类与用法实例
2018/09/01 PHP
js查错流程归纳
2012/05/04 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
jquery 定位input元素的几种方法小结
2013/07/28 Javascript
Javascript冒泡排序算法详解
2014/12/03 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
js,jq,css多方面实现简易下拉菜单功能
2017/05/13 Javascript
一次围绕setTimeout的前端面试经验分享
2017/06/15 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
Vue axios设置访问基础路径方法
2018/09/19 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
玩转Koa之核心原理分析
2018/12/29 Javascript
关于layui时间回显问题的解决方法
2019/09/24 Javascript
[06:30]DOTA2英雄梦之声_第15期_死亡先知
2014/06/21 DOTA
[00:37]2016完美“圣”典风云人物:rOtk宣传片
2016/12/09 DOTA
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
Python学习笔记之For循环用法详解
2019/08/14 Python
使用python自动追踪你的快递(物流推送邮箱)
2020/03/17 Python
Django自带用户认证系统使用方法解析
2020/11/12 Python
python爬虫基础之urllib的使用
2020/12/31 Python
Python LMDB库的使用示例
2021/02/14 Python
泰国王权免税店官方网站:KingPower
2019/03/11 全球购物
学校食堂采购员岗位职责
2013/12/05 职场文书
爱国主义教育活动总结
2014/05/07 职场文书
2014党员干部四风问题对照检查材料思想汇报
2014/09/24 职场文书
大学生创业事迹材料
2014/12/30 职场文书
六一领导慰问欢迎词
2015/01/26 职场文书
培训讲师开场白
2015/06/01 职场文书
《最终幻想14》6.01版本4月5日推出 追加新任务新道具
2022/04/03 其他游戏