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 相关文章推荐
让你同时上传 1000 个文件 (一)
Oct 09 PHP
WindowsXP中快速配置Apache+PHP5+Mysql
Jun 05 PHP
php 处理上百万条的数据库如何提高处理查询速度
Feb 08 PHP
PHP extract 将数组拆分成多个变量的函数
Jun 30 PHP
php购物车实现代码
Oct 10 PHP
具有时效性的php加密解密函数代码
Jun 19 PHP
hadoop常见错误以及处理方法详解
Jun 19 PHP
PHP中鲜为人知的10个函数
Feb 28 PHP
zf框架的registry(注册表)使用示例
Mar 13 PHP
php实现购物车功能(上)
Jul 23 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
PHP实现的函数重载功能示例
Aug 03 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字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
zf框架的数据库追踪器使用示例
2014/03/13 PHP
smarty内置函数foreach用法实例
2015/01/22 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
使用CSS3实现字体颜色渐变的实现
2021/03/09 HTML / CSS
jQuery 操作下拉列表框实现代码
2010/02/22 Javascript
jQuery示例收集
2010/11/05 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
2017/02/08 Javascript
js经验分享 JavaScript反调试技巧
2018/03/10 Javascript
vue.js响应式原理解析与实现
2020/06/22 Javascript
详解滑动穿透(锁body)终极探索
2019/04/16 Javascript
js canvas实现5张图片合成一张图片
2019/07/15 Javascript
python调用新浪微博API项目实践
2014/07/28 Python
详解Python中dict与set的使用
2015/08/10 Python
用xpath获取指定标签下的所有text的实例
2019/01/02 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
解决TensorFlow模型恢复报错的问题
2020/02/06 Python
Python自动重新加载模块详解(autoreload module)
2020/04/01 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
html5 button autofocus 属性介绍及应用
2013/01/04 HTML / CSS
英国领先的独立酒精饮料零售商:DrinkSupermarket
2021/01/13 全球购物
使用索引有什么好处
2016/07/27 面试题
最新奶茶店创业计划书
2014/01/25 职场文书
大学毕业生求职自荐信
2014/02/20 职场文书
母亲节感恩寄语
2014/02/21 职场文书
2016年第32个教师节致辞
2015/11/26 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
Django使用echarts进行可视化展示的实践
2021/06/10 Python
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers