分类: Web开发
2016-06-08 22:20:51
关于Discuz的加密解密函数,相信大家都有所了解,该authcode函数可以说是对PHP界作出了重大的贡献,真的发觉discuz这个函数写的太精彩啦。
研究了一下这个算法,总的来说可以归纳为以下三点:
1,动态性,同一字符串使用相同的key,每次加密的密文都不一样,而解密方法只有一个,其实就是把解密的信息放到了密文上面。
2,时效性,可以自己加一个限期参数,以秒为单位,这个其实就是在密文里加入了有效时间。
3,统一性,加密和解密都用同一个函数,而且用了比较简单的异或算法。
由于该函数具有以上功能,所以适用的环境也很多,一般用于用户登陆和开发API时防刷接口等。
代码如下
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)); } }
测试代码
string(47) "d3e07W7LR+bA/vJOmLzYHn8flO4bEbuJXDPX+ZBkHAR9KwE" string(6) "123456"原文地址:标签: