AIS3 2020 - 🦖 T-Rex (Crypto, 100)

Challenge

題目:prob

Solution

Nihilist cipher 只是簡單的對應,行和列對到誰就是哪個字元

如果去維基百科查的會發現行列被我偷換了,因為我覺得太水了

然後 Flag 有點長,抱歉

因為我不想要有人不寫腳本,不過其實用取代的也只要做 36 次就出來了。

解法 1: 做個 dictionary 來 decode

decoder = {'!!': 'U', '@!': 'E', '#!': 'K', '$!': 'N', '%!': 'X', '&!': '1', '!@': '6', '@@': 'C', '#@': 'R', '$@': 'H', '%@': 'Q', '&@': 'Y', '!#': 'P', '@#': '8', '##': '4', '$#': '0', '%#': 'L', '&#': '7', '!$': 'T', '@$': 'V', '#$': 'I', '$$': '9', '%$': 'D', '&$': '3', '!%': '2', '@%': 'A', '#%': 'J', '$%': 'M', '%%': 'O', '&%': 'Z', '!&': '5', '@&': 'G', '#&': 'S', '$&': 'B', '%&': 'F', '&&': 'W', '{' : '{', '}' : '}'}
dec = "@% #$ #& &$ { @@ !% &! $# #@ &@ !! $# %@ %& !# &! @$ %! $# %& %% $@ #& #! !! &% && %! &$ $% $$ %# %# %# $$ !@ #! #! @& !& %@ &$ $# !# &! #$ &$ #% &% !% &@ @# #@ @$ && !% %& @! &@ #$ &! @$ %@ #& %% #$ !@ !& ## %$ &@ $% #! @! $# &$ $# &$ $$ $! $& $! $@ &! @# %% &# %& #% #@ &$ &@ !! &@ &$ $! &$ @# @! !# && $! && #@ @! $@ #% $! !& @$ !$ &! @! !$ %# #& %! %$ %$ %! $$ %@ $$ %& %@ @# !& &@ #! #& #% %@ %$ $& %& %& %! #! $& #@ %& @% &! !@ !% @! !$ $@ $# &@ %! ## @@ !$ #@ $% @% !# %@ !$ %& &@ @$ $% %! &$ %$ #& #@ $% &# #$ %# $# &$ &# &$ %# @! #% $$ &$ $# %@ #$ %$ $! @# @@ !$ &@ $@ #! @% &$ #! #$ !@ #! %% !% %& #$ %% #% @@ !@ $! #! %@ #$ &@ &! @@ $# !& #@ $! ## !% %# $% %$ && %@ $! !$ #! !$ !! &@ #& @$ $$ #! $# %@ %! @# #& @$ &! %& %$ #$ $$ %& %$ !# $% @$ %& !@ #% %$ &% !# !& #! $! }"
print(''.join([decoder[c] for c in dec.split()]))

解法 2: 不想做 dictionary 的腳本

table = '''
! @ # $ % &

! V F Y J 6 1

@ 5 0 M 2 9 L

# I W H S 4 Q

$ K G B X T A

% E 3 C 7 P N

& U Z 8 R D O
'''
cipher = '&$ !# $# @% { %$ #! $& %# &% &% @@ $# %# !& $& !& !@ _ $& @% $$ _ @$ !# !! @% _ #! @@ !& _ $# && #@ !% %$ ## !# &% @$ _ $& &$ &% %& && #@ _ !@ %$ %& %! $$ &# !# !! &% @% ## $% !% !& @! #& && %& !% %$ %# %$ @% ## %@ @@ $% ## !& #% %! %@ &@ %! &@ %$ $# ## %# !$ &% @% !% !& $& &% %# %@ #$ !# && !& #! %! ## #$ @! #% !! $! $& @& %% @@ && #& @% @! @# #@ @@ @& !@ %@ !# !# $# $! !@ &$ $@ !! @! &# @$ &! &# $! @@ &@ !% #% #! &@ &$ @@ &$ &! !& #! !# ## %$ !# !# %$ &! !# @# ## @@ $! $$ %# %$ @% @& $! &! !$ $# #$ $& #@ %@ @$ !% %& %! @% #% $! !! #$ &# ## &# && $& !! !% $! @& !% &@ !& $! @# !@ !& @$ $% #& #$ %@ %% %% &! $# !# $& #@ &! !# @! !@ @@ @@ ## !@ $@ !& $# %& %% !# !! $& !$ $% !! @$ @& !& &@ #$ && @% $& $& !% &! && &@ &% @$ &% &$ &@ $$ }'
key, *table = list(map(lambda x: x.split(),table.split('\n\n')))
flag = ''.join([ table[key.index(c[1])][1+key.index(c[0])] if c[0] in key else c for c in cipher.split()])
print(flag)

解題腳本:

solve1.py
solve2.py