0x46转化为十进制_0x3a转换为十进制

2025-02-1512:39:31创业资讯0

如前所述,在分组加密的过程中,明文的长度往往不满足加密算法的要求,因此需要进行填充操作,而填充的规则已经形成了一些常见的规定。

常见的填充规则如下所述。 需要注意的是,即使消息的长度是块大小的整数倍,填充操作仍然是必要的。

在解密过程中,如果发现填充不正确,通常会抛出异常,这可以作为验证填充操作是否正确的依据。

以 MD5 和 SHA1 的填充方式为例,它们在加密过程中也涉及到填充操作。填充的目的是为了达到固定长度,使得加密算法能够正常工作。

在实际应用中,有时候攻击者会针对不当的填充操作进行攻击。这里以 2018 年上海市大学生网络安全大赛的一道题目为例进行说明。

该题目的问题出现在填充操作时。当明文长度不足某个固定值时,需要进行填充操作,填充的字节数通常是缺的字节数。如果明文已经达到了足够的长度,按照代码逻辑则不会进行额外的填充。

这个问题的关键在于 unpad 操作没有进行充分的检查,仅仅依靠最后一个字节来判断填充的字节数。这给了我们篡改最后一个字节来控制去掉的填充字节数的机会。

  1. 为了绕过不需要填充的条件,可以选择追加足够多的字节使当前内容不需要进行填充。在此例中,选择了追加 223 字节并设置最后一个字节为特定值。
  2. 服务器将对追加信息后的内容进行 S 盒替换,并将结果赋给 flag 变量。
  3. 再次选择追加操作时,由于需要继续追加,服务器将取出 flag 变量进行逆 S 盒替换和 unpad 操作。由于 unpad 算法的缺陷,它将错误地移除后面的大量内容,只留下明文的前 32 位。
  4. 在明文剩余的部分输入一个字符 i,这样下一次加密的对象就是原有的前 32 位和新的字符 i 的组合。
  5. 通过选择不同的加密方式对当前 flag 进行加密,并控制字符 i 进行逐字节爆破,当得到的密文与原 flag 的密文相匹配时,就可以得知 flag 的最后一个字节。
  6. 重复此过程直到获取完整的 flag。

根据上述步骤,可以编写相应的脚本或程序进行攻击。最终得到的 flag 为:

flag{H4ve_fun_w1th_p4d_and_unp4d}

  • 版权说明:
  • 本文内容由互联网用户自发贡献,本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 295052769@qq.com 举报,一经查实,本站将立刻删除。