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 相关文章推荐
如何将一个表单同时提交到两个地方处理
Oct 09 PHP
PHP中的正规表达式(一)
Oct 09 PHP
php实现的在线人员函数库
Apr 09 PHP
使用array mutisort 实现按某字段对数据排序
Jun 18 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
Jul 01 PHP
php foreach循环中使用引用的问题
Nov 06 PHP
destoon复制新模块的方法
Jun 21 PHP
thinkPHP中create方法与令牌验证实例浅析
Dec 08 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
May 29 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
Jul 04 PHP
thinkphp5 模型实例化获得数据对象的教程
Oct 18 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 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
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
PHP合并两个或多个数组的方法
2019/01/20 PHP
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
2012/12/12 Javascript
Javascript 中 null、NaN和undefined的区别总结
2013/04/10 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
JavaScript实现点击文字切换登录窗口的方法
2015/05/11 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
Jquery实现跨域异步上传文件总结
2017/02/03 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
JS中的多态实例详解
2017/10/15 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
Vue组件中prop属性使用说明实例代码详解
2018/05/31 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
详解Python中的文本处理
2015/04/11 Python
Python基于PycURL自动处理cookie的方法
2015/07/25 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
python if not in 多条件判断代码
2016/09/21 Python
django使用html模板减少代码代码解析
2017/12/12 Python
python如何读取bin文件并下发串口
2019/07/05 Python
解决Python使用列表副本的问题
2019/12/19 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
python matlab库简单用法讲解
2020/12/31 Python
同程旅游英文网站:LY.com
2018/11/13 全球购物
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
销售实习自我鉴定
2013/12/07 职场文书
社区端午节活动方案
2014/01/28 职场文书
九年级物理教学反思
2014/01/29 职场文书
小学毕业典礼主持词
2014/03/27 职场文书
学校学期工作总结
2015/08/13 职场文书
导游词之沈阳清昭陵
2019/12/28 职场文书
python 爬取豆瓣网页的示例
2021/04/13 Python
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL