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 缩略图实现函数代码
Jun 23 PHP
php适配器模式介绍
Aug 14 PHP
有关phpmailer的详细介绍及使用方法
Jan 28 PHP
PHP中字符安全过滤函数使用小结
Feb 25 PHP
php实现通过cookie换肤的方法
Jul 13 PHP
php中bind_param()函数用法分析
Mar 28 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
Jun 17 PHP
php post json参数的传递和接收处理方法
May 31 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
May 31 PHP
详解Laravel服务容器的绑定与解析
Nov 05 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
Sep 25 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
Mar 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数据库密码的找回的步骤
2011/01/12 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
使用PHP实现Mysql读写分离
2013/06/28 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
PHP实现的获取文件mimes类型工具类示例
2018/04/08 PHP
Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例
2019/10/12 PHP
javaScript 数值型和字符串型之间的转换
2009/07/25 Javascript
单独使用CKFinder选择图片的方法
2010/08/21 Javascript
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
在Python中使用glob模块查找文件路径的方法
2015/06/17 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
2016/06/20 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
微信小程序开发之animation循环动画实现的让云朵飘效果
2017/07/14 Javascript
javascript实现日历效果
2019/06/17 Javascript
Vue.js项目实战之多语种网站的功能实现(租车)
2019/08/07 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
2020/04/30 jQuery
Python输出PowerPoint(ppt)文件中全部文字信息的方法
2015/04/28 Python
python算法演练_One Rule 算法(详解)
2017/05/17 Python
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
使用Python读取二进制文件的实例讲解
2018/07/09 Python
小白入门篇使用Python搭建点击率预估模型
2018/10/12 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
Django发送邮件功能实例详解
2019/09/02 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
Python unittest单元测试框架实现参数化
2020/04/29 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
基于CSS3实现的几个小loading效果
2018/09/27 HTML / CSS
详解使用HTML5的classList属性操作CSS类
2017/10/13 HTML / CSS
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
旅游饭店管理专业自荐书
2014/06/28 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
老公给老婆的检讨书(精华篇)
2014/10/18 职场文书
2015年新学期寄语
2015/02/26 职场文书