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+DBM的同学录程序(4)
Oct 09 PHP
PHP生成月历代码
Jun 14 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
Nov 02 PHP
如何用php获取程序执行的时间
Jun 09 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
Jun 24 PHP
VB中的RasEnumConnections函数返回632错误解决方法
Jul 29 PHP
迁移PHP版本到PHP7
Feb 06 PHP
初识PHP中的Swoole
Apr 05 PHP
Laravel框架模板继承操作示例
Jun 11 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
Aug 05 PHP
PHP 图片合成、仿微信群头像的方法示例
Oct 25 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
Jan 07 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 上一篇,下一篇文章实现代码与原理说明
2010/05/09 PHP
php学习之简单计算器实现代码
2011/06/09 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
2014/08/20 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
2017/02/17 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
2020/12/16 PHP
复制本贴标题和地址的js代码
2008/07/01 Javascript
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
2013/01/04 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
2016/12/29 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
JS中的三个循环小结
2017/06/20 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
JS删除数组里的某个元素方法
2018/02/03 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
Python中SOAP项目的介绍及其在web开发中的应用
2015/04/14 Python
Python实现LRU算法的2种方法
2015/06/24 Python
Python下rrdtool模块的基本使用方法
2015/11/13 Python
每天迁移MySQL历史数据到历史库Python脚本
2018/04/13 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
西班牙三叶草药房:Farmacias Trébol
2019/05/03 全球购物
一套VC试题
2015/01/23 面试题
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
linux面试题参考答案(4)
2013/01/28 面试题
测试工程师岗位职责
2013/11/28 职场文书
物业总经理岗位职责
2014/02/28 职场文书
文明礼貌演讲稿
2014/05/12 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书