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 相关文章推荐
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
Apr 12 PHP
关于在php.ini中添加extension=php_mysqli.dll指令的说明
Jun 14 PHP
php购物网站支付paypal使用方法
Nov 28 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
Jun 24 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
Oct 10 PHP
php去除HTML标签实例
Nov 06 PHP
使用php转义输出HTML到JavaScript
Mar 27 PHP
php生成动态验证码gif图片
Oct 19 PHP
php使用环形链表解决约瑟夫问题完整示例
Aug 07 PHP
PHP反射学习入门示例
Jun 14 PHP
PHP用swoole+websocket和redis实现web一对一聊天
Nov 05 PHP
阿里云服务器搭建Php+Apache运行环境的详细过程
May 15 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
dede全站URL静态化改造[070414更正]
2007/04/17 PHP
PHP 加密解密内部算法
2010/04/22 PHP
php查询mysql数据库并将结果保存到数组的方法
2015/03/18 PHP
Laravel 5 框架入门(四)完结篇
2015/04/09 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
基于JavaScript自定义构造函数的详解说明
2013/04/24 Javascript
php与js的区别是什么
2013/08/05 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
jQuery中slice()方法用法实例
2015/01/07 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
探讨跨域请求资源的几种方式(总结)
2016/12/02 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
jQuery实现判断上传图片类型和大小的方法示例
2018/04/11 jQuery
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
jQuery使用jsonp实现百度搜索的示例代码
2020/07/08 jQuery
Python Deque 模块使用详解
2014/07/04 Python
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
跟老齐学Python之集合的关系
2014/09/24 Python
在Linux下使用Python的matplotlib绘制数据图的教程
2015/06/11 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
基于python-opencv3的图像显示和保存操作
2019/06/27 Python
给我一面国旗 python帮你实现
2019/09/30 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
详解HTML5新增标签
2017/11/27 HTML / CSS
学习十八大精神心得体会
2013/12/31 职场文书
民生工程实施方案
2014/03/22 职场文书
中秋节国旗下演讲稿
2014/09/05 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
中学生打架《检讨书》范文
2019/08/12 职场文书
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL