hash_equals 是可防止时序攻击的字符串比较,那么什么是时序攻击呢?

这里我们比对验证码是否与缓存中一致时,使用了 hash_equals 方法。

hash_equals($verifyData['code'], $request->verification_code)

hash_equals 是可防止时序攻击的字符串比较,那么什么是时序攻击呢?比如这段代码我们使用

$verifyData['code'] == $request->verification_code

进行比较,那么两个字符串是从第一位开始逐一进行比较的,发现不同就立即返回 false,那么通过计算返回的速度就知道了大概是哪一位开始不同的,这样就实现了电影中经常出现的按位破解密码的场景。而使用 hash_equals 比较两个字符串,无论字符串是否相等,函数的时间消耗是恒定的,这样可以有效的防止时序攻击。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

hash_equals 这个花费的恒定的?那是根据字符串输入的长度恒定吗,比较10位密码长度的判断花费的时间和100位肯定是不一样的?

1周前 评论
MArtian 1周前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!