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 相关文章推荐
mysql建立外键
Nov 25 PHP
php不用正则采集速度探究总结
Mar 24 PHP
php正则表达式使用的详细介绍
Apr 27 PHP
PHP实现一维数组转二维数组的方法
Feb 25 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
php类常量用法实例分析
Jul 09 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
Apr 30 PHP
php使用PDO获取结果集的方法
Feb 16 PHP
PHP html_entity_decode()函数讲解
Feb 25 PHP
PHP中number_format()函数的用法讲解
Apr 08 PHP
php use和include区别总结
Oct 13 PHP
PHP中用Trait封装单例模式的实现
Dec 18 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
用Zend Encode编写开发PHP程序
2010/02/21 PHP
discuz目录文件资料汇总
2014/12/30 PHP
Yii框架的路由配置方法分析
2019/09/09 PHP
MooTools 1.2中的Drag.Move来实现拖放
2009/09/15 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
wap手机图片滑动切换特效无css3元素js脚本编写
2014/07/28 Javascript
同一个网页中实现多个JavaScript特效的方法
2015/02/02 Javascript
利用js实现禁止复制文本信息
2015/06/03 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
浅谈javascript中的 “ &amp;&amp; ” 和 “ || ”
2017/02/02 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
原生js封装运动框架的示例讲解
2017/10/01 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
微信小程序云开发之使用云存储
2019/05/17 Javascript
微信小程序如何通过用户授权获取手机号(getPhoneNumber)
2020/01/21 Javascript
[01:01:18]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#2COL VS LGD
2016/03/03 DOTA
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
记录Django开发心得
2014/07/16 Python
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
Python中的ctime()方法使用教程
2015/05/22 Python
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
Python切片工具pillow用法示例
2018/03/30 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
2018/11/29 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
python实现录屏功能(亲测好用)
2020/03/02 Python
python 异步async库的使用说明
2020/05/04 Python
python中可以声明变量类型吗
2020/06/18 Python
在keras里实现自定义上采样层
2020/06/28 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
北京华建集团SQL面试题
2014/06/03 面试题
私人会所最新创业计划书范文
2014/03/24 职场文书
2014法院四风问题对照检查材料思想汇报
2014/10/04 职场文书
工作服管理制度范本
2015/08/06 职场文书
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android