Gu-f 发表于 2019-6-5 20:47:07

致敬经典题解

本帖最后由 Gu-f 于 2019-6-5 21:07 编辑

一开始做这道题的时候首先反应的是凯撒密码,但是经过凯撒爆破之后发现不太对
爆破的结果并没有flag
然后转换思路,开始从附带的图片中寻找思路找了半天也没发现图片中有什么有效的信息
然后看那一段密文猜测是凯撒的一个变型然后我写出来flag和lrua的ASCII码进行比较flag 102 10897    103lrua 108 114117   97差值 -6   -6   -20   +6然后我们知道z的ascii是122显然是117+6-122为1对应a于是猜测变换规则为循环字母,即当加到z的时候开始从a加所以有以下规律:flag 102 10897    103lrua 108 114117   97差值 -6   -6   -6   +6
观察下面这两行数据发现lrua 108 114117   97差值 -6   -6   -6   +6
偶数为-6,奇数为+6于是得到规律偶数为左循环偏移6,奇数为向右循环偏移6
然后我们就可以写代码了但是这里有个小小的坑,就是数字不需要变换,一开始怎么提交都不对,然后发现flag有未知符号,才意识到0-9数字不需要变换,只进行字母的变换,这里好坑!!!
下面是我写的脚本,供参考:

roger 发表于 2019-6-7 22:51:09

很详细!看来是自己认真做的{:8_243:}

isdof 发表于 2019-10-5 15:47:33

根据楼主的解答写出的脚本
import string

s ='lrua{1uy3yj9l-yw9u-48j2-uuj8-36h03706y7u7}'
s1 = ''

for i in range(len(s)):
        if s.isdigit() or ord(s) == 123 or ord(s) == 125 or ord(s) == 45:
                s1 += s
        else:
                if (ord(s) + 6 > 122):
                        s1 += chr(ord(s) + 6 - 122 + 96)
                elif (ord(s) % 2 == 0):
                        s1 += chr(ord(s)-6)
                else:
                        s1 += chr(ord(s)+6)

print(s1)

Gu-f 发表于 2019-11-21 19:03:15

isdof 发表于 2019-10-5 15:47
根据楼主的解答写出的脚本

感谢大佬分享
页: [1]
查看完整版本: 致敬经典题解