0x00 前言
0x01 题目
自动钥匙⊕
明文全大写,得到后转小写,并以_连接单词。
fsskryenvkm~jl{ejs}jwflzsnpgmifq{{j{|suhzrjppnx|qvixt~whu
- 1
- 2
- 3
- 4
- 5
- 6
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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
然后根据提示是一个古典密码,查一下:

然后找到了自动秘钥的算法
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
这里还少一个秘钥,所以需要进行爆破:
最终可以得到秘钥是KEYFORFLAG
最终的结果进行拼接即可。
以上
评论记录:
回复评论: