首页 > 技术分享 > ThinkPHP
收藏

ThinkPHP验证码加密规则详解

09/06 17:42
大潇博客 原创文章,转载请标明出处
本文针对ThinkPHP3.2版本,如说TP5,请绕行。

TP自带验证码方法、自带验证码校验方法,使用极为方便,但是如果有多次校验需求时(例如:ajax首先验证一次,提交表单时再验证一次),自带的校验方法不可取,原因自带的校验方法在第一次验证之后会把SESSION中的验证码清空,故第二次验证彻底无效。
打印SESSION中的信息可以发现,存在SESSION中的验证码是一个经过加密的字串,这意味着我们单纯的用POST接收到的code是不能和SESSION中的code直接做对比,为此我们需要摸透TP验证码的加密规则。

打开TP的验证码类文件(ThinkPHP\Library\Think\Verify.class.php),在配置参数中会看到验证码的加密秘钥,默认是'ThinkPHP.CN',这是加密的会用到的重要参数
 

加密规则:
1、使用md5首先把加密秘钥(上文提到)加密,然后用substr截取加密后的字串,TP默认从第5个字符开始截取,截取8个字符;
2、使用md5加密输入的验证码字符串,然后用substr截取加密后的字串,TP默认从第8个字符开始截取,截取10个字符;
3、把第一次截取到的8个字符和第二次截取到的10个字符拼接成一个串,再次使用md5把刚得到的字串加密,既得到SESSION中保存的验证码加密字串
(ThinlPHP验证码加密方法)

明白了它的加密规则,做项目时便可以自行验证,多次验证也都OK

除此之外还可以修改TP验证码校验的方法来实现多次校验,下图是自带的校验方法
我们可以看到红框圈中的部分,一旦验证成功便会把SESSION中的code清空,把session($key, null)此行代码注释掉即可,这种做法不推荐。


打赏

上一篇:第一页

下一篇:最后一页

阅读排行

大家都在搜

博客维护不易,感谢你的肯定
扫码打赏,建议金额1-10元
  • 15601023311