php源码分析之DZX1.5加密解密函数authcode用法


Posted in PHP onJune 17, 2015

本文实例讲述了php源码分析之DZX1.5加密解密函数authcode用法。分享给大家供大家参考。具体分析如下:

<?php
$authkey = '';
/**
 * @param string $string: 输入的需要加密(或解密)的明文(或密文)
 * @param string $operation: 'DECODE'或其它,其中默认表示解密,输入其它表示加密
 * @param string $key: 加解密密钥
 * @param int $expiry: 有效期
 */
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
  global $authkey;
  $ckey_length = 4;
  $key = md5($key != '' ? $key : $authkey);
  $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)) {
      return substr($result, 26);
    } else {
      return '';
    }
  } else {
    return $keyc.str_replace('=', '', base64_encode($result));
  }
}
$str = '1234';
$key = '1234';
echo "明文:".$str;
echo "<br />";
echo "密钥:".$key;
$encode = authcode($str,'11',$key);
echo "<br />";
echo "加密后的密文:".$encode;
echo "<br />";
$decode = authcode($encode,'DECODE',$key);
echo "解密后的明文:".$decode;
/*End of php*/

运行结果如下:

明文:1234
密钥:1234
加密后的密文:a52f67eXZGVy0HtQBo4vOREhq3WxnL6E2zlx75JGfoJW
解密后的明文:1234

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
用Flash图形化数据(二)
Oct 09 PHP
PHP实现用户认证及管理完全源码
Mar 11 PHP
php5中类的学习
Mar 28 PHP
PHP 多进程 解决难题
Jun 22 PHP
PHP日期处理函数 整型日期格式
Jan 12 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
Jul 01 PHP
PHP的反射类ReflectionClass、ReflectionMethod使用实例
Aug 05 PHP
PHP基于MySQL数据库实现对象持久层的方法
Jun 17 PHP
PHP错误Warning:mysql_query()解决方法
Oct 24 PHP
PHP图像裁剪缩略裁切类源码及使用方法
Jan 07 PHP
PHP浮点比较大小的方法
Feb 14 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
Nov 28 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 #PHP
php正则替换处理HTML页面的方法
Jun 17 #PHP
PHP排序算法类实例
Jun 17 #PHP
php准确获取文件MIME类型的方法
Jun 17 #PHP
php操作MongoDB类实例
Jun 17 #PHP
PHP实现的购物车类实例
Jun 17 #PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
Jun 17 #PHP
You might like
php at(@)符号的用法简介
2009/07/11 PHP
php中get_headers函数的作用及用法的详细介绍
2013/04/27 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
适用于初学者的简易PHP文件上传类
2015/10/29 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
跨浏览器的设置innerHTML方法
2006/09/18 Javascript
js下获取div中的数据的原理分析
2010/04/07 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
Js获取图片原始宽高的实现代码
2016/05/17 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
深入理解Javascript中的valueOf与toString
2017/01/04 Javascript
jquery实现下拉框左右选择功能
2017/02/21 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
vue ssr服务端渲染(小白解惑)
2019/11/10 Javascript
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
Python字典操作简明总结
2015/04/13 Python
python下MySQLdb用法实例分析
2015/06/08 Python
python3操作mysql数据库的方法
2017/06/23 Python
给你选择Python语言实现机器学习算法的三大理由
2017/11/15 Python
在Python中pandas.DataFrame重置索引名称的实例
2018/11/06 Python
Python3.5迭代器与生成器用法实例分析
2019/04/30 Python
django多对多表的创建,级联删除及手动创建第三张表
2019/07/25 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
pygame实现俄罗斯方块游戏(AI篇2)
2019/10/29 Python
Flask框架路由和视图用法实例分析
2019/11/07 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
eDreams澳大利亚:预订机票、酒店和度假产品
2017/04/19 全球购物
高二物理教学反思
2014/02/08 职场文书
民主评议党员自我评价材料
2014/09/18 职场文书
六年级作文之家庭作文
2019/12/12 职场文书
CSS中float高度塌陷问题的四种解决方案
2022/04/18 HTML / CSS