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初学者头痛的十四个问题
Jul 12 PHP
php下过滤HTML代码的函数
Dec 10 PHP
一个PHP二维数组排序的函数分享
Jan 17 PHP
php设计模式之命令模式使用示例
Mar 02 PHP
在PHP程序中使用Rust扩展的方法
Jul 03 PHP
PHP-FPM之Chroot执行环境详解
Aug 03 PHP
简单解决微信文章图片防盗链问题
Dec 17 PHP
php获取excel文件数据
Apr 21 PHP
详解PHP5.6.30与Apache2.4.x配置
Jun 02 PHP
Laravel中的Auth模块详解
Aug 17 PHP
解决laravel session失效的问题
Oct 14 PHP
基于php+MySql实现学生信息管理系统实例
Aug 04 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 按时间段查询数据方法(实例说明)
2008/11/02 PHP
php 文件状态缓存带来的问题
2008/12/14 PHP
gd库图片下载类实现下载网页所有图片的php代码
2012/08/20 PHP
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
2012/10/31 PHP
php中foreach结合curl实现多线程的方法分析
2016/09/22 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
2018/07/30 PHP
laravel 关联关系遍历数组的例子
2019/10/10 PHP
JS 判断代码全收集
2009/04/28 Javascript
jQuery hover 延时器实现代码
2011/03/12 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
2013/09/03 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
javascript url几种编码方式详解
2016/06/06 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
Bootstrap 填充Json数据的实例代码
2017/01/11 Javascript
vue路由教程之静态路由
2019/09/03 Javascript
在python的WEB框架Flask中使用多个配置文件的解决方法
2014/04/18 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
在脚本中单独使用django的ORM模型详解
2020/04/01 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
HMV日本官网:全球知名的音乐、DVD和电脑游戏零售巨头
2016/08/13 全球购物
商务助理岗位职责
2013/11/13 职场文书
国际商务专业职业生涯规划书范文
2014/01/17 职场文书
学校安全教育制度
2014/01/31 职场文书
物理专业大学生职业生涯规划书
2014/02/07 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
暑假安全保证书
2015/02/28 职场文书
Vue vee-validate插件的简单使用
2021/06/22 Vue.js
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android