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原创论坛
Oct 09 PHP
PHP版 汉字转码的实现详解
Jun 09 PHP
深入解析php中的foreach问题
Jun 30 PHP
php 强制下载文件实现代码
Oct 28 PHP
php中eval函数的危害与正确禁用方法
Jun 30 PHP
php接口数据加密、解密、验证签名
Mar 12 PHP
大家都应该掌握的PHP关联数组使用技巧
Dec 25 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
Apr 04 PHP
PHP基于递归实现的约瑟夫环算法示例
Aug 27 PHP
PHP格式化显示时间date()函数代码
Oct 03 PHP
PHP获取HTTP body内容的方法
Dec 31 PHP
使用composer 安装 laravel框架的方法图文详解
Aug 02 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动态创建Flash动画
2006/10/09 PHP
解析phpstorm + xdebug 远程断点调试
2013/06/20 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
Django 中 cookie的使用
2017/08/17 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
2009/10/20 Javascript
IE下Ajax缓存问题的快速解决方法(get方式)
2014/01/09 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
2014/03/06 Javascript
如何将php数组或者对象传递给javascript
2014/03/20 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
Javascript的表单验证-揭开正则表达式的面纱
2016/03/18 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
js实现时钟定时器
2020/03/26 Javascript
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
vant时间控件使用方法详解
2020/12/24 Javascript
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
Python最长公共子串算法实例
2015/03/07 Python
python dict.get()和dict['key']的区别详解
2016/06/30 Python
Python字典简介以及用法详解
2016/11/15 Python
Python3实现抓取javascript动态生成的html网页功能示例
2017/08/22 Python
python3.4.3下逐行读入txt文本并去重的方法
2018/04/29 Python
H&M旗下高端女装品牌:& Other Stories
2018/05/07 全球购物
英国最受欢迎的在线隐形眼镜商店:VisionDirect.co.uk
2018/12/06 全球购物
UDP协议功能
2013/01/06 面试题
EJB与JAVA BEAN的区别
2016/08/29 面试题
员工培训心得体会
2013/12/30 职场文书
大专会计自我鉴定
2014/02/06 职场文书
数学国培研修感言
2014/02/13 职场文书
房屋委托书范本
2014/04/04 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书