2019独角兽企业重金招聘Python工程师标准>>>

// 参数解释  // $string: 明文 或 密文  // $operation:DECODE表示解密,其它表示加密  // $key: 密匙  // $expiry:密文有效期  static public function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0){  // 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙  $ckey_length = 4;  // 密匙  $key = md5($key ? $key : '123456');  // 密匙a会参与加解密  $keya = md5(substr($key, 0, 16));  // 密匙b会用来做数据完整性验证  $keyb = md5(substr($key, 16, 16));  // 密匙c用于变化生成的密文  $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';  // 参与运算的密匙  $cryptkey = $keya.md5($keya.$keyc);  $key_length = strlen($cryptkey);  // 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b),解密时会通过这个密匙验证数据完整性  // 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确  $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') {  // substr($result, 0, 10) == 0 验证数据有效性  // substr($result, 0, 10) - time() > 0 验证数据有效性  // substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16) 验证数据完整性  // 验证数据有效性,请看未加密明文的格式  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 {  // 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因  // 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码  return $keyc.str_replace('=', '', base64_encode($result));  }  }

转载于:https://my.oschina.net/sharesuiyue/blog/479985

discuz加密解密,可参考下相关推荐

  1. 白话 discuz加密解密算法,包你懂

    今天和大家分享一下discuz的加密和解密算法 研究了一个星期了, 总结了这个 算法有三个特点 1,动态性,同一字符串每次加密的密文都不一样 2,时间性,可以自己加一个限期参数,以秒为单位 3,统一性 ...

  2. android rsa加密工具类,GitHub - Lerist/encrypt: Android 加密解密工具包。

    Encrypt(加密工具) 字符串,byte[],文件等对象的加密和解密工具集合,包含了多种加密方案. 加密类型 摘要 相关方法 简单加密 换一种编码格式 Base64Util 单向加密 只能加密,不 ...

  3. 叙述无保密机制的rsa签名过程_安全系列之——RSA的公钥私钥有多少人能分的清楚?RSA的签名验签与加密解密如何使用公私钥?...

    在对接很多的互联网公司的开发平台时,这些互联网公司未来自身平台的安全,都会需要调用方签名确认调用方的身份是合法的,同时未来信息网络传输的安全可能还需要加密解密.比如对接支付宝.微信开放平台时,需要配置 ...

  4. Opencv实现图像的加密解密

    1.基础:基于异或操作实现图像加密解密 一般情况下,图像的加密和解密过程是通过按位异或运算实现的.将原始图像与密钥图像进行按位异或,可以实现加密,将加密后的图像与密钥图像再进行按位异或可以实现解密过程 ...

  5. Spring Cloud Config 配置的加密解密

    配置内容的加密解密 很多场景下很多场景下,对于某些敏感的配置内容,例如数据库账号密码等应当加密存储.Config Server为配置内容的加密与解密提供了支持. 安装JCE Config Server ...

  6. php动态密码和加密解密函数的使用(动态密码、Discuz核心函数AuthCode、任意输入密码验证)

    php加密解密的使用 一.项目说明 二.项目分析 1.js外部文件 2.HTML容器构建 3.layui前端验证 4.php后端验证 封装函数 密码验证规则 strpos内置函数 三.经典的核心加密函 ...

  7. MacOS下使用C语言基于openssl库进行RSA加密解密

    MacOS下使用C语言基于openssl库进行RSA加密解密 1 安装openssl并生成密钥 首先当然要安装openssl(这里记得看一下安装路径,应该是/usr/local/Cellar/open ...

  8. 怎么把计算机磁盘解密,Win10系统下怎样对磁盘进行加密、解密?Win10系统加密、解密磁盘图文教程...

    一些安装了Windows10系统的用户,为了更好地保护自己的个人隐私,会想要对电脑磁盘进行加密.那么,这该如何操作呢?下面小编就介绍下Windows10系统给磁盘加密.解密的具体方法. 具体方法如下: ...

  9. python加密解密 sha256_Python下实现的RSA加密/解密及签名/验证功能示例

    本文实例讲述了Python下实现的RSA加密/解密及签名/验证功能.分享给大家供大家参考,具体如下: 原文是py2环境,而我的环境是py3,所以对原代码做了修改:decode(), encode() ...

最新文章

  1. Python 标准库之 fcntl
  2. 使用Jmeter至WebService压力测试
  3. 基于Ajax的Web框架Echo2 2.0发布
  4. 10.Java设计模式 工厂模式,单例模式
  5. VC++获取屏幕大小第一篇 像素大小GetSystemMetrics
  6. 浏览器兼容CSS渐进增强 VS 优雅降级如何选择
  7. 数据结构与算法--3.字符串的旋转
  8. matlab完整脚本模板,在PyCharm中给Python脚本设置默认的代码模板和活动模板,文末有一个案例(MATLAB GUI和Qt对比做一个界面)...
  9. android 页面icon拉伸_所有同学!注意咯!!设计师不可忽略的页面转场来咯!!...
  10. 在scrapy上使用cookie模拟登录
  11. [哀悼]5.12地震后把网站改成灰色的方法
  12. 快速幂算法c语言求a的n次方,快速幂运算模板(求n^k以及前几位或后几位)
  13. 【每日算法Day 64】LeetCode 861. 翻转矩阵后的得分
  14. [CTSC 1999]拯救大兵瑞恩[网络流24题]孤岛营救问题
  15. STM32控制WS2812B HAL库
  16. 范德蒙行列式、克拉默法则、雅可比矩阵
  17. 微信小游戏代码包侵权的一种解决方案
  18. Xcode13.3 13.2以及Flutter新版本的稳定性问题
  19. 项目中报错找不到.h或者.m文件解决方法
  20. 通俗易懂介绍一下ZigBee的特性

热门文章

  1. Windows下redis使用及安装
  2. PHP判断文件夹是否存在和创建文件夹的方法
  3. Java-WAS的Hello world
  4. 诗与远方:无题(三十三)
  5. 前端在线学习网站W3School
  6. Dockerfile文件详解
  7. 微型计算机的普通显示器通常有两组引线 即,微型计算机的显示屏通常具有两组引线,即()...
  8. 超详细:Springboot连接centos7下redis6的必要配置和失败分析
  9. AOP Error creating bean with name ‘myCaculator‘ defined in file [XXX]
  10. 聚合中返回source_大数据搜索与可视化分析(9)elasticsearch聚合分析Metric Aggregation...