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 将bmp图片转为jpg等其他任意格式的图片
Jun 21 PHP
采集邮箱的php代码(抓取网页中的邮箱地址)
Jul 17 PHP
使用PHP会话(Session)实现用户登陆功能
Jun 29 PHP
php的数组与字符串的转换函数整理汇总
Jul 18 PHP
php 表单提交大量数据发生丢失的解决方法
Mar 03 PHP
php微信公众平台开发之获取用户基本信息
Aug 17 PHP
twig里使用js变量的方法
Feb 05 PHP
3种方法轻松处理php开发中emoji表情的问题
Jul 18 PHP
PHP面向对象程序设计类的定义与用法简单示例
Dec 27 PHP
Laravel学习教程之IOC容器的介绍与用例
Aug 15 PHP
PHP闭包定义与使用简单示例
Apr 13 PHP
php实现推荐功能的简单实例
Sep 29 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导出Redis数据到另一个Redis中的代码
2014/03/12 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
什么是cookie?js手动创建和存储cookie
2014/05/27 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
JS控制网页动态生成任意行列数表格的方法
2015/03/09 Javascript
JSONP跨域请求实例详解
2016/07/04 Javascript
JS实现页面载入时随机显示图片效果
2016/09/07 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
Vue计算属性的使用
2017/08/04 Javascript
JavaScript代码执行的先后顺序问题
2017/10/29 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
js实现一款简单踩白块小游戏(曾经很火)
2019/12/02 Javascript
[01:01:29]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第一场
2018/04/05 DOTA
Python多线程实例教程
2014/09/06 Python
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
python并发编程之线程实例解析
2017/12/27 Python
python中subprocess批量执行linux命令
2018/04/27 Python
pyenv与virtualenv安装实现python多版本多项目管理
2019/08/17 Python
face++与python实现人脸识别签到(考勤)功能
2019/08/28 Python
Python读取实时数据流示例
2019/12/02 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
Python RabbitMQ实现简单的进程间通信示例
2020/07/02 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
项目经理岗位职责
2013/11/11 职场文书
建筑工程专业学生的自我评价
2013/12/25 职场文书
旅游饭店管理专业自荐书
2014/06/28 职场文书
2014年小学重阳节活动策划方案
2014/09/16 职场文书
2019最新版股权转让及委托持股协议书范本
2019/08/07 职场文书
话题作文之成长
2019/12/09 职场文书