0x00 前言
CTF 加解密合集:CTF 加解密合集
0x01 题目
自动钥匙⊕
明文全大写,得到后转小写,并以_连接单词。
fsskryenvkm~jl{ejs}jwflzsnpgmifq{{j{|suhzrjppnx|qvixt~whu
0x02 Write Up
首先提示需要异或,进行异或的爆破
s = 'fsskryenvkm~jl{ejs}jwflzsnpgmifq{{j{|suhzrjppnx|qvixt~whu'
for i in range(255):
res = ''
for j in range(0, len(s)):
temp = ord(s[j]) ^ i
if 65 <= temp <= 90 or 97 <= temp <= 122:
res += (chr(temp))
else:
break
if len(res) == len(s):
print(res)
然后根据提示是一个古典密码,查一下:
然后找到了自动秘钥的算法
DIC = "abcdefghijklmnopqrstuvwxyz"
def encrypt_autokey(string, key):
ciphertext = ""
key += string
key_index = 0
for i in string:
if i not in DIC:
ciphertext += i
ciphertext += DIC[(DIC.index(i) + DIC.index(key[key_index])) % 26]
key_index += 1
return ciphertext
def decrypt_autokey(string, key):
plaintext = ""
key_index = 0
for i in string:
if i not in DIC:
plaintext += i
char = DIC[(DIC.index(i) - DIC.index(key[key_index])) % 26]
key += char
plaintext += char
key_index += 1
return plaintext
这里还少一个秘钥,所以需要进行爆破:
最终可以得到秘钥是KEYFORFLAG
最终的结果进行拼接即可。
以上