프로그래밍/python

무차별 대입 공격 (카이사르 암호 해독)

공부하는 뚱이 2025. 2. 24. 12:50
반응형
def makeDisk(k):
    dec_disk = {}
    for i in range(26):  # 범위를 26으로 수정
        alp = (i + k) % 26 + 65
        dec_disk[chr(alp)] = chr(i + 65)
    return dec_disk

def caesar(msg, key):
    ret = ''
    msg = msg.upper()
    disk = makeDisk(key)
    for c in msg:
        if c in disk:
            ret += disk[c]
        else:
            ret += c
    return ret

def attack(msg):
    for key in range(1, 26):
        decmsg = caesar(msg, key)
        print('SHIFT[%d]: %s' % (key, decmsg))

if __name__ == '__main__':
    msg = 'UGAMKZMBSMGQAVCUJMZBPZMMNQDMWVMBPZMM'
    attack(msg)
 
SHIFT[1]: TFZLJYLARLFPZUBTILYAOYLLMPCLVULAOYLL
SHIFT[2]: SEYKIXKZQKEOYTASHKXZNXKKLOBKUTKZNXKK
SHIFT[3]: RDXJHWJYPJDNXSZRGJWYMWJJKNAJTSJYMWJJ
SHIFT[4]: QCWIGVIXOICMWRYQFIVXLVIIJMZISRIXLVII
SHIFT[5]: PBVHFUHWNHBLVQXPEHUWKUHHILYHRQHWKUHH
SHIFT[6]: OAUGETGVMGAKUPWODGTVJTGGHKXGQPGVJTGG
SHIFT[7]: NZTFDSFULFZJTOVNCFSUISFFGJWFPOFUISFF
SHIFT[8]: MYSECRETKEYISNUMBERTHREEFIVEONETHREE
SHIFT[9]: LXRDBQDSJDXHRMTLADQSGQDDEHUDNMDSGQDD
SHIFT[10]: KWQCAPCRICWGQLSKZCPRFPCCDGTCMLCRFPCC
SHIFT[11]: JVPBZOBQHBVFPKRJYBOQEOBBCFSBLKBQEOBB
SHIFT[12]: IUOAYNAPGAUEOJQIXANPDNAABERAKJAPDNAA
SHIFT[13]: HTNZXMZOFZTDNIPHWZMOCMZZADQZJIZOCMZZ
SHIFT[14]: GSMYWLYNEYSCMHOGVYLNBLYYZCPYIHYNBLYY
SHIFT[15]: FRLXVKXMDXRBLGNFUXKMAKXXYBOXHGXMAKXX
SHIFT[16]: EQKWUJWLCWQAKFMETWJLZJWWXANWGFWLZJWW
SHIFT[17]: DPJVTIVKBVPZJELDSVIKYIVVWZMVFEVKYIVV
SHIFT[18]: COIUSHUJAUOYIDKCRUHJXHUUVYLUEDUJXHUU
SHIFT[19]: BNHTRGTIZTNXHCJBQTGIWGTTUXKTDCTIWGTT
SHIFT[20]: AMGSQFSHYSMWGBIAPSFHVFSSTWJSCBSHVFSS
SHIFT[21]: ZLFRPERGXRLVFAHZOREGUERRSVIRBARGUERR
SHIFT[22]: YKEQODQFWQKUEZGYNQDFTDQQRUHQAZQFTDQQ
SHIFT[23]: XJDPNCPEVPJTDYFXMPCESCPPQTGPZYPESCPP
SHIFT[24]: WICOMBODUOISCXEWLOBDRBOOPSFOYXODRBOO
SHIFT[25]: VHBNLANCTNHRBWDVKNACQANNORENXWNCQANN

 

 

SHIFT[8]번을 보면 secret key를 알 수 있다!

반응형