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 相关文章推荐
php中将数组存到文件里的实现代码
Jan 19 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
Apr 08 PHP
php二维数组排序方法(array_multisort usort)
Dec 25 PHP
php防止伪造数据从地址栏URL提交的方法
Aug 24 PHP
php插入含有特殊符号数据的处理方法
Nov 24 PHP
PHP面向对象学习之parent::关键字
Jan 18 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
PHP常用字符串函数小结(推荐)
Aug 05 PHP
PHP调用全国天气预报数据接口查询天气示例
Feb 20 PHP
浅谈PHP array_search 和 in_array 函数效率问题
Oct 15 PHP
laravel 框架实现无限级分类的方法示例
Oct 31 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 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
在windows iis5下安装php4.0+mysql之我见
2006/10/09 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
typecho插件编写教程(五):核心代码
2015/05/28 PHP
jQuery 白痴级入门教程
2009/11/11 Javascript
JavaScript 数组循环引起的思考
2010/01/01 Javascript
json原理分析及实例介绍
2012/11/29 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
javascript中的parseInt和parseFloat区别
2013/07/12 Javascript
js控制input框只读实现示例
2014/01/20 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
关于Vue.js一些问题和思考学习笔记(1)
2016/12/02 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
详解nodejs微信公众号开发——2.自动回复
2017/04/10 NodeJs
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
详解Vue.js项目API、Router配置拆分实践
2018/03/16 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
python如何查看微信消息撤回
2018/11/27 Python
如何通过python实现全排列
2020/02/11 Python
基于tensorflow for循环 while循环案例
2020/06/30 Python
python 安装移动复制第三方库操作
2020/07/13 Python
举例详解CSS3中的Transition
2015/07/15 HTML / CSS
Rakuten Kobo台湾:电子书、eReaders和Reading应用程式
2017/11/24 全球购物
Nisbets法国:英国最大的厨房和餐饮设备供应商
2019/03/18 全球购物
建筑公司文秘岗位职责
2013/11/29 职场文书
商务英语应届生自我鉴定
2013/12/08 职场文书
社区七一党员活动方案
2014/01/25 职场文书
化妆品促销方案
2014/02/24 职场文书
优质服务演讲稿
2014/05/14 职场文书
学习十八大的心得体会
2014/09/01 职场文书
护士医德医风自我评价
2014/09/15 职场文书
2014年优质护理服务工作总结
2014/11/14 职场文书
2015年校本培训工作总结
2015/07/24 职场文书
Python基础之数据结构详解
2021/04/28 Python