是否可组合(相加)两个SHA256哈希值得到拼接内容的SHA256结果?
结论
不存在仅通过两个独立字符串的SHA256哈希值做组合运算,直接得到二者拼接后字符串SHA256结果的可行方法,你描述的计算逻辑完全不成立。
原因说明
先明确你给出的基准测试值:
- 字符串
"a"的SHA256哈希值:CA978112CA1BBDCAFAC231B39A23DC4DA786EFF8147C4E72B9807785AFEE48BB - 字符串
"b"的SHA256哈希值:3E23E8160039594A33894F6564E1B1348BBD7A0088D42C4ACB73EEAED59C009D - 拼接串
"ab"的实际SHA256哈希值:FB8E20FC2E4C3F248C60C39BD652F3C1347298BB977B8B4D5903B85055620603 - 拼接串
"ba"的实际SHA256哈希值:970F519C2CADBCEFB1E81694F904BC6229DD2A8300E98C6D0D4FC4BFCA584140
SHA256属于迭代构造的密码学哈希函数,计算任意输入的哈希时,内部会维护8个32位状态寄存器、已处理消息总长度、填充规则相关的全量中间参数,最终对外输出的256位哈希值只是整个计算流程全部结束后的最终摘要,不会携带计算过程中的任何中间状态信息。
如果要实现“先算a的哈希,再追加输入b得到ab的哈希”的效果,必须在计算完a的哈希时,额外保存当时的全量内部状态和已处理消息长度,才能在这个状态基础上继续处理b的输入,最终得到拼接后的哈希结果。仅靠最终输出的H(a)和H(b)两个256位摘要,既无法反推计算过程的中间状态,也不可能通过异或、加减、拼接重哈希之类的简单组合运算得到H(ab)或H(ba)的正确结果。
如果这类运算方法真的存在,SHA256会彻底丧失抗碰撞、抗原像的核心密码学安全属性,根本不可能作为通用安全哈希算法被广泛使用至今。
内容的提问来源于stack exchange,提问作者Hoi Nhon Nguyen
相关产品推荐
相关产品推荐

