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 相关文章推荐
一个SQL管理员的web接口
Oct 09 PHP
php字符串分割函数explode的实例代码
Feb 07 PHP
php页面防重复提交方法总结
Nov 25 PHP
php提交表单发送邮件的方法
Mar 20 PHP
php实现通用的从数据库表读取数据到数组的函数实例
Mar 21 PHP
解决php表单重复提交实现方法
Sep 29 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 PHP
PHP上传图片、删除图片简单实例
Nov 12 PHP
PHP处理bmp格式图片的方法分析
Jul 04 PHP
thinkPHP框架实现生成条形码的方法示例
Jun 06 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
Oct 21 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
Dec 12 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
法国:浪漫之都的咖啡文化
2021/03/03 咖啡文化
PHP 和 MySQL 开发的 8 个技巧
2006/10/09 PHP
PHP 无限分类三种方式 非函数的递归调用!
2011/08/26 PHP
PHP中文件缓存转内存缓存的方法
2011/12/06 PHP
php对数组排序的简单实例
2013/12/25 PHP
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
js中substring和substr的定义和用法
2014/05/05 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
2014/05/14 Javascript
jquery通过ajax加载一段文本内容的方法
2015/01/15 Javascript
Node.js 异步编程之 Callback介绍(一)
2015/03/30 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
bootstrap模态框实现拖拽效果
2016/12/14 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
JS 设置Cookie 有效期 检测cookie
2017/06/15 Javascript
用React实现一个完整的TodoList的示例代码
2017/10/30 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
2018/07/06 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
2019/10/30 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
pygame播放音乐的方法
2015/05/19 Python
举例讲解Python中的迭代器、生成器与列表解析用法
2016/03/20 Python
python通过getopt模块如何获取执行的命令参数详解
2017/12/29 Python
Python机器学习logistic回归代码解析
2018/01/17 Python
python实现海螺图片的方法示例
2019/05/12 Python
Python 控制终端输出文字的实例
2019/07/12 Python
CSS实现鼠标滑过鼠标点击代码写法
2016/12/26 HTML / CSS
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
《夏夜多美》教学反思
2014/02/17 职场文书
给客户的检讨书
2014/12/21 职场文书
小学老师对学生的评语
2014/12/29 职场文书
2015年读书月活动总结
2015/03/26 职场文书
拔河比赛新闻稿
2015/07/17 职场文书
Element实现动态表格的示例代码
2021/08/02 Javascript
python单向链表实例详解
2022/05/25 Python