IT/👨‍💻Computer Science

아핀 암호 - 파이썬 코드 예시

지식모아이령 2021. 5. 16. 23:29

 '아핀 암호'를 파이썬으로 어떻게 구현하는지 알아보려고 합니다. 기본적인 암호학의 개념인 아핀 암호를 파이썬 코드로 표현하면서, 파이썬의 장점을 발견하실 수 있을 겁니다.

 

☞아핀암호 자바스크립트 코드 예시 보러가기

 

코드 화면이 떠 있는 노트북

 

1. 아핀 암호란?

아핀 암호는 이름에서 알 수 있듯이, 아핀 변환의 원리를 사용한 암호화 방법입니다. 아핀 변환은 두 가지 기본 연산, 즉 '이동(translation)'과 '확대/축소(scaling)'를 이용한 것입니다. 아핀 암호에서는 이 두 연산을 암호화와 복호화 과정에 적용합니다.

 

☞아핀암호 자세히 보기

 

2. 파이썬 코드 예시

#아핀 암호
ENC = 0
DEC = 1

def makeDisk(k1, k2):
    enc_disk = {}
    dec_disk = {}

    for i in range(26):
        enc_i = (k1*i + k2)%26
        enc_ascii = enc_i + 65
        enc_disk[chr(i+65)] = chr(enc_ascii)
        dec_disk[chr(enc_ascii)] = chr(i+65)

    return enc_disk, dec_disk

def affine(msg, key1, key2, mode):
    ret = ''
    msg = msg.upper()
    enc_disk, dec_disk = makeDisk(key1, key2)

    if mode is ENC:
        disk = enc_disk
    if mode is DEC:
        disk = dec_disk

    for c in msg:
        if c in disk:
            ret += disk[c]
        else:
            ret += c

    return ret

def main():
    k1, k2 = 3, 2

    check='0'
    while check != '3':
        print("1.Cipher\n2.Decipher\n3.Exit")
        check = input("number: ")

        if check == '1':
            f = open("C:/msg.txt", 'r')
            line = f.read()
            msg = line
            msg = affine(msg, k1, k2, ENC)
            f = open("C:/Cipher.txt", 'w')
            f.write(msg)
            f.close()
        elif check == '2':
            f = open("C:/Cipher.txt", 'r')
            line = f.read()
            msg = line
            msg = affine(msg, k1, k2, DEC)
            f = open("C:/Decipher.txt", 'w')
            f.write(msg.lower())
            f.close()

if __name__ == '__main__':
    main()
    
#C드라이브에 msg.txt를 생성 후 암호화 하고 싶은 내용을 넣고 사용하면 됨

 

☞파이썬 기초가 궁금하다면?

 

참조

http://www.yes24.com/Product/Goods/78875992

 

화이트 해커를 위한 암호와 해킹 (2판) - YES24

초보자를 위한 정보 보안의 기본『화이트 해커를 위한 암호와 해킹 2판(White Hat Python)』은 여러 해킹 기법에 대한 소스들을 파이썬으로 작성한 책이다. 파이썬 프로그래밍은 직관적이고 배우기

www.yes24.com

※화이트 해커를 위한 암호와 해킹