有区别。而且,使用 SHA1 就是在往枪口上撞。
MD5 和 SHA1 都存在比较容易利用的长度扩展攻击。楼上已经讲过。
就是你知道 h(a)和 b ,但是不知道 a 是什么。这种情况下你依旧可以直接用 h(a)和 b 构造出 h(a+b)。
这些会有长度扩展攻击的 hash 算法你可以理解为,在计算时是一块一块处理的,会把之前一块 hash 结果拿过来带到下一轮用才这样。
所以
如果你是 sha1(key+msg)的话,你可以不理会 key ,随意在 msg 末尾加 msg2 得到 sha1(key+msg+msg2)。
就像黑绝改宇智波家族石碑一样。
你说,那我反过来,我把 key 放后面呢?
那攻击者需要构造一个 msg2 能碰撞 msg 。sha1(msg2)=sha1(msg)
服务器那边 sha1(msg2+key)计算出来的结果应该和 sha1(msg+key)一样。
当然也有人干脆 sha1(key+msg+key)。据说也不好。我没研究过了。
HMAC 就是为了应对 MAC 时避免 hash 算法缺陷的东西。
所以用 HMAC 吧。 |