关于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"

原文地址:
标签:         

智能推荐