第一题

base编码的多=作为补位放在最后面,这里放在了最前面,初步推测密文进行了倒装。直接用base64解码或者其他base解码都无法得到答案,所以用下列代码将其倒装回去 。

其中,[::-1]表示从字符串的最后一位开始,每次逆序跨一个字符,直到字符串的第一位。这样就可以实现字符串的翻转。

最后得到结果。
第二题

刚开始以为和佛山的电话号码有关,查询后发现好像没什么特别之处。根据下面的提示,两者之差,而且中国的电话号码基本上都是1开头,所以这里推测是一个很大的数减去这个数。而首位为1,所以有以下猜测

得到答案。
第三题

题目中的代码首先将所有的小写字母存储在列表table中。然后,使用shuffle函数将table列表中的元素随机打乱。接着,通过randint函数随机生成一个0~25之间的整数作为密钥key。最后,使用key对flag字符串进行加密,并将加密后的密文存储在text列表中。 具体来说,对于flag字符串中的每个字符,如果该字符在table列表中存在,则将该字符在table列表中的位置加上密钥key后取模26,得到加密后的字符,并将该字符添加到text列表中;否则,直接将该字符添加到text列表中。最终,输出打乱后的table列表和加密后的text列表。
因为flag给定了ctfshow{},所以可以直接根据源代码进行修改来推断key是多少

至于第四排为什么是for key in range(26):而不是for key in range(25):,是因为在Python中,range(n)函数的参数是0到n-1的整数序列。因此,range(26)会生成一个包含0到25的整数序列。
得到key之后,就能反推flag了。

使用.join(flag)将解密后的字符列表拼接成一个字符串,以方便输出。
第四题

首先排除维吉尼亚密码,因为秘钥只能为字母。
前面部分被识别出来为base64编码,答案已经有了雏形

后面部分带有字母,初步预测和16进制有关。进制转换后发现,改为二进制时可得到和前面长度一样的一窜数字

立刻反应过来很有可能1对应的字母应该大写,这里用代码来实现,熟悉Python

首先,我们定义了两个字符串s1和s2,分别表示需要处理的字符和数字字符串。 然后,我们定义了一个空字符串result,用于存放处理后的结果。 接下来,我们使用zip()函数将s1和s2逐个字符配对,得到一个元组的列表,每个元组包含了s1和s2中相同位置的字符。 然后我们遍历这个元组列表,当数字字符串s2中相应位置上的数字为1时,将s1中相应位置上的字符转为大写,然后将其添加到结果字符串result中;否则,将s1中相应位置上的字符直接添加到结果字符串result中。
第五题

![]()
乍一看,我乐开了花,以为找到了同好。结果放进去一看不是,悲。

除了G语言之外,还有一个通过表请加密的叫做emoji-aes加密。根据mooncake为名字,可以猜测key就是mooncake

第六题

首先ctfshow肯定在最前面,栅栏密码,发现普通的栅栏密码整不出来,换成W型整出来了。
但是这并不是最终答案,内部这些东西应该也是被加密了的

虽然吧,他说的不怎么对,但是确实对了两个,可以推测应该是从小到大的base编码。
第一个是base16

第二个是base32

第三个是base64,第四个是base58(这个有点怪,试了好几个网站才试出来),第五个是base85

最后答案为 ctfshow{base16_base32_base64_base58_base}
文章讲述了多个解密问题,涉及base编码的特殊处理、电话号码的数学关系、Python中的字符串翻转以及加密算法的运用,包括列表打乱、随机密钥和栅栏密码。还提到了维吉尼亚密码、十六进制转换和不同base之间的转换。通过解密过程,找到了关键信息并得出最终答案。
9524

被折叠的 条评论
为什么被折叠?



