0x00 前言
CTF 加解密合集:CTF 加解密合集
0x01 题目
from string import ascii_lowercase
from random import shuffle,randint
table=list(ascii_lowercase)
shuffle(table)
flag='ctfshow{xxx}'
key=randint(0,25)
text=[]
for i in flag:
if i in table:
text.append(table[(table.index(i)+key)%26])
else:
text.append(i)
print(table)
print(text)
# ['h', 'g', 'u', 'p', 'o', 'v', 'n', 'b', 'i', 'j', 'y', 'k', 'a', 'z', 'w', 'q', 't', 'l', 'r', 'd', 'x', 'e', 's', 'm', 'c', 'f']
# ['r', 'y', 'd', 't', 'x', 'c', 'i', '{', 'y', 'x', '1', 't', '_', 'u', 't', '_', 'z', '1', 'd', 'd', 'a', 'q', 'h', 'y', '_', 'r', '4', 'q', 't', 'n', 'a', '!', '!', '}']
0x02 Write Up
这道题目相对而言比较简单,是一个比较简单的变种凯撒加密。
首先是初始的字符变了,不再是顺序的abcd
table=list(ascii_lowercase)
shuffle(table)
然后就是偏移运算,这里是采用了一个随机值的方式。但是后面又给了结果,前面有提示了是ctf,那么去猜解位数这些都可以进行解决,当然想简单的就使用暴力美学
table=['h', 'g', 'u', 'p', 'o', 'v', 'n', 'b', 'i', 'j', 'y', 'k', 'a', 'z', 'w', 'q', 't', 'l', 'r', 'd', 'x', 'e', 's', 'm', 'c', 'f']
from random import shuffle,randint
text=['r', 'y', 'd', 't', 'x', 'c', 'i', '{', 'y', 'x', '1', 't', '_', 'u', 't', '_', 'z', '1', 'd', 'd', 'a', 'q', 'h', 'y', '_', 'r', '4', 'q', 't', 'n', 'a', '!', '!', '}']
for x in range(25):
s = ""
for i in text:
if i in table:
s+=table[(table.index(i)-x)%26]
else:
s+=i
print(s)
得到最终的结果:
ctfshow{th1s_is_d1ffrent_c4esar!!}
以上