2021编程竞赛第二轮过程回顾

2021-09-01 12:38:52阅读 13评论 0

题目高难度

题目大致是,给出一张图片中,提示隐藏信息加密后放在图片中,需要找出。

我们尝试从图片上找到一些关键信息,但是一无所获。图片中间一张模糊的表格,看不出有什么信息。二维码扫描后,进入的是招聘页面。

从图片上是无法通过肉眼获取到任何有效信息的,于是我们想到了将图片下载下来,从图片文件中寻找信息。

学习加密知识

在网上搜索AES-128-CBC了解到,这是一种对称加密算法,加密、解密过程需要1个密码,1个向量。
1)加密过程
将原文分成很多块,将第一块取出于向量进行异或运算,将运算结果再与第二块数据进行异或运算,直到最后,将最终结果用密码加密,再用base64编码。
2)解密过程
加密过程的逆过程。

尝试解密

由加密的机制可知,信息最终是以base64编码的,所以我们应该要先找到这段base64的编码,再找到密码和向量才能解密。

刚开始,我们考虑这段base64编码是否隐藏在图片文件中,但经过我们仔细查找并没有找到base64的编码。然后想到将图片进行base64编码,这样我们就得到一个base64的编码,现在的问题是要找到密码和向量。
这时我想到,这个二维码不是可以扫描吗,可能密码就藏在扫描后的招聘广告里。招聘广告里找了一下,最后找到"凤栖梧桐才聚格尔",这个应该是密码,向量也是它。

在代码里执行,结果报错,提示长度不够。密码向量长度应该都是16位,灵机一动,于是将密码和向量换成"凤栖梧桐才聚格尔凤栖梧桐才聚格尔",接下来就是见证奇迹的时刻,怀着无比激动的心情点击"运行",结果出来一堆红色报错信息。

寻找到了一线生机,但又再次陷入了绝望。讨论群原本热闹,此时开始却陷入沉默,大家的心情都坠入谷底。已经到了吃饭的时间,已经没有心情去吃饭了,也没有任何可以继续进行下去的方案,于是我也不再看。

坚持不懈

虽然昨天的方案失败了,但我仍然详细,突破口就在图片文件里。于是我用编辑器打开图片文件,仔细看里面的内容。我发现里面有xml的内容,所以有效信息应该以明文的方式存在这个文件里。在文件中发现"E8BF99E4B8AA504E47E69687E"一段字符串,看起来就像是16进制的字符。

我用代码将图片中将[0-9]和[A-F]的字符串取出来,拼接到一起,再将它们转换成byte,然后转换成字符串。在这个存在大量乱码的字符串中,发现了两个关键信息。"这个PNG文件中藏有一段ASN.1数据,其中的OID是加密密钥,时间是IV(超过16字节部分需要截断""仔细看Logo中左侧表格的右边线,有9个4x32的竖条,选取其中8个可以拼成一个32x32的二维码"。

我将我的发现,发送到群里。原本沉默的群,一下子变得活跃起来。大家很快找到了图片,并拼接成二维码,扫描后找到"jzSUbILnPOZeBRlUtKR2Qi8zj7eqLqygsKDuwVfGMdQ="。后面又从PNG文件中找到ASN.1数据,接下来就顺利成章地找到了答案。

总结

1)多学习密码学知识
对于我个人来说,直接暴露出这方面知识的欠缺。
2)团队合作的重要性
每个人了解的知识是局限的,但将每个人知道的知识叠加起来,应该就非常全面了,大部分的问题都可以解决。

还没有评论,来说两句吧