crypto
100 points
Vigenere
k: ????????????
p: SECCON{???????????????????????????????????}
c: LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ
|ABCDEFGHIJKLMNOPQRSTUVWXYZ{}
-+----------------------------
A|ABCDEFGHIJKLMNOPQRSTUVWXYZ{}
B|BCDEFGHIJKLMNOPQRSTUVWXYZ{}A
C|CDEFGHIJKLMNOPQRSTUVWXYZ{}AB
D|DEFGHIJKLMNOPQRSTUVWXYZ{}ABC
E|EFGHIJKLMNOPQRSTUVWXYZ{}ABCD
F|FGHIJKLMNOPQRSTUVWXYZ{}ABCDE
G|GHIJKLMNOPQRSTUVWXYZ{}ABCDEF
H|HIJKLMNOPQRSTUVWXYZ{}ABCDEFG
I|IJKLMNOPQRSTUVWXYZ{}ABCDEFGH
J|JKLMNOPQRSTUVWXYZ{}ABCDEFGHI
K|KLMNOPQRSTUVWXYZ{}ABCDEFGHIJ
L|LMNOPQRSTUVWXYZ{}ABCDEFGHIJK
M|MNOPQRSTUVWXYZ{}ABCDEFGHIJKL
N|NOPQRSTUVWXYZ{}ABCDEFGHIJKLM
O|OPQRSTUVWXYZ{}ABCDEFGHIJKLMN
P|PQRSTUVWXYZ{}ABCDEFGHIJKLMNO
Q|QRSTUVWXYZ{}ABCDEFGHIJKLMNOP
R|RSTUVWXYZ{}ABCDEFGHIJKLMNOPQ
S|STUVWXYZ{}ABCDEFGHIJKLMNOPQR
T|TUVWXYZ{}ABCDEFGHIJKLMNOPQRS
U|UVWXYZ{}ABCDEFGHIJKLMNOPQRST
V|VWXYZ{}ABCDEFGHIJKLMNOPQRSTU
W|WXYZ{}ABCDEFGHIJKLMNOPQRSTUV
X|XYZ{}ABCDEFGHIJKLMNOPQRSTUVW
Y|YZ{}ABCDEFGHIJKLMNOPQRSTUVWX
Z|Z{}ABCDEFGHIJKLMNOPQRSTUVWXY
{|{}ABCDEFGHIJKLMNOPQRSTUVWXYZ
}|}ABCDEFGHIJKLMNOPQRSTUVWXYZ{
SECCON{ABABABCDEDEFGHIJJKLMNOPQRSTTUVWXYYZ}
tkmru
idzuna
cipherとplain textを見比べると,key冒頭がVIGENER
であることがわかる.
とりあえずkeyをVIGENERAAAAA
と仮定して復号すると,flagの中身は,アルファベットを順番に並べて一部を繰り返した文字列であるらしいことがわかる.
あとは勘でkeyを推測したらできた.
しほくんの参考になるかな
http://elliptic-shiho.hatenablog.com/entry/2015/11/12/041637
KeyがVIGENERECODE
で長さが12。(12元の変数)
平文が43文字。
書きかけのやつ
#!/usr/bin/env python2.7
# coding: UTF-8
c = 'LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ'
p = 'SECCON{'
#key_offset = [21, 8, 6, 4, 13, 4, 17, 4, 21, 8, 6, 4] #VIGENEREVIGEのAからのoffset
#key_offset = [21, 8, 6, 4, 13, 4, 17, 4] # VIGENEREのAからのoffset
key_offset = [21, 8, 6, 4, 13, 4, 17] # VIGENERのAからのoffset
table = {'A': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ{}',
'B': 'BCDEFGHIJKLMNOPQRSTUVWXYZ{}A',
'C': 'CDEFGHIJKLMNOPQRSTUVWXYZ{}AB',
'D': 'DEFGHIJKLMNOPQRSTUVWXYZ{}ABC',
'E': 'EFGHIJKLMNOPQRSTUVWXYZ{}ABCD',
'F': 'FGHIJKLMNOPQRSTUVWXYZ{}ABCDE',
'G': 'GHIJKLMNOPQRSTUVWXYZ{}ABCDEF',
'H': 'HIJKLMNOPQRSTUVWXYZ{}ABCDEFG',
'I': 'IJKLMNOPQRSTUVWXYZ{}ABCDEFGH',
'J': 'JKLMNOPQRSTUVWXYZ{}ABCDEFGHI',
'K': 'KLMNOPQRSTUVWXYZ{}ABCDEFGHIJ',
'L': 'LMNOPQRSTUVWXYZ{}ABCDEFGHIJK',
'M': 'MNOPQRSTUVWXYZ{}ABCDEFGHIJKL',
'N': 'NOPQRSTUVWXYZ{}ABCDEFGHIJKLM',
'O': 'OPQRSTUVWXYZ{}ABCDEFGHIJKLMN',
'P': 'PQRSTUVWXYZ{}ABCDEFGHIJKLMNO',
'Q': 'QRSTUVWXYZ{}ABCDEFGHIJKLMNOP',
'R': 'RSTUVWXYZ{}ABCDEFGHIJKLMNOPQ',
'S': 'STUVWXYZ{}ABCDEFGHIJKLMNOPQR',
'T': 'TUVWXYZ{}ABCDEFGHIJKLMNOPQRS',
'U': 'UVWXYZ{}ABCDEFGHIJKLMNOPQRST',
'V': 'VWXYZ{}ABCDEFGHIJKLMNOPQRSTU',
'W': 'WXYZ{}ABCDEFGHIJKLMNOPQRSTUV',
'X': 'XYZ{}ABCDEFGHIJKLMNOPQRSTUVW',
'Y': 'YZ{}ABCDEFGHIJKLMNOPQRSTUVWX',
'Z': 'Z{}ABCDEFGHIJKLMNOPQRSTUVWXY',
'{': '{}ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'}': '}ABCDEFGHIJKLMNOPQRSTUVWXYZ{'}
'''
key冒頭復号(VIGENERになった)
print chr(0x41 + table['S'].find(c[0])), table['S'].find(c[0])
print chr(0x41 + table['E'].find(c[1])), table['E'].find(c[1])
print chr(0x41 + table['C'].find(c[2])), table['C'].find(c[2])
print chr(0x41 + table['C'].find(c[3])), table['C'].find(c[3])
print chr(0x41 + table['O'].find(c[4])), table['O'].find(c[4])
print chr(0x41 + table['N'].find(c[5])), table['N'].find(c[5])
print chr(0x41 + table['{'].find(c[6])), table['{'].find(c[6])
'''
flag = ''
for i, v in enumerate(c):
ki = key_offset[i % len(key_offset)]
for table_key in table:
if table[table_key][ki] == v:
print table_key
flag += table_key
print flag
SECCON{_____BCDEDEF_____KLMNOPQ_____VWXYYZ}