모스 부호 변환기(Morse Code Translator)는 암호학(Cryptography) 분야에서 활용되는 대표적인 도구로, 전신을 발명한 미국의 발명가 새뮤얼 F. B. 모스(Samuel F. B. Morse)의 이름을 따서 명명되었습니다. 이 기법은 텍스트 메시지를 점(.)과 대시(-), 그리고 구분용 슬래시(/) 등의 기호 조합으로 변환하여 전달합니다.
원리는 매우 간단합니다. 영어 알파벳 한 글자마다 고유한 점과 선의 조합이 정해져 있으며, 이를 이용해 메시지를 기호로 암호화(Encryption)하고, 반대로 기호를 다시 영어로 복호화(Decryption)할 수 있습니다.
모스 부호 사전
아래는 알파벳, 숫자, 그리고 주요 특수문자에 대한 모스 부호 매핑 사전입니다.
'A':'.-', 'B':'-...',
'C':'-.-.', 'D':'-..', 'E':'.',
'F':'..-.', 'G':'--.', 'H':'....',
'I':'..', 'J':'.---', 'K':'-.-',
'L':'.-..', 'M':'--', 'N':'-.',
'O':'---', 'P':'.--.', 'Q':'--.-',
'R':'.-.', 'S':'...', 'T':'-',
'U':'..-', 'V':'...-', 'W':'.--',
'X':'-..-', 'Y':'-.--', 'Z':'--..',
'1':'.----', '2':'..---', '3':'...--',
'4':'....-', '5':'.....', '6':'-....',
'7':'--...', '8':'---..', '9':'----.',
'0':'-----', ', ':'--..--', '.':'.-.-.-',
'?':'..--..', '/':'-..-.', '-':'-....-',
(':'-.--.', ')':'-.--.-'}
변환 예시
예를 들어 "PYTHON-PROGRAM"이라는 메시지를 모스 부호로 변환하면 다음과 같습니다.
메시지: PYTHON-PROGRAM 출력: .--. -.-- - .... --- -. -....- .--. .-. --- --. .-. .- --
알고리즘
암호화(Encryption)
1단계: 주어진 문자열에서 각 글자를 하나씩 추출하여 모스 부호 사전과 대조한 뒤,
해당 글자에 대응하는 코드를 찾습니다.
2단계: 찾은 코드를 변수에 저장합니다. 이때 모든 모스 부호 사이에는
공백 한 칸을 유지해야 합니다.
3단계: 단어와 단어 사이에는 공백 두 칸을 유지해야 합니다.
복호화(Decryption)
1단계: 먼저 문자열 끝에 공백을 하나 추가합니다.
2단계: 공백을 만나기 전까지 메시지의 각 문자를 순서대로 탐색합니다.
3단계: 공백을 만나면 지금까지 모은 기호를 모스 부호 사전과 대조하여
결과를 변수에 저장합니다.
4단계: 연속된 두 개의 공백을 만나면 복호화 중인 문자열에 공백을 추가합니다.
5단계: 메시지의 마지막 공백을 만나면 해당 기호가 모스 부호의 마지막 글자임을 의미합니다.
전체 예제 코드
다음은 위 알고리즘을 파이썬으로 구현한 전체 코드입니다.
# -*- coding: utf-8 -*-
"""
Created on Tue Oct 2 11:21:31 2018
@author: Satyajit
"""
# 모스 부호 차트를 나타내는 딕셔너리
MORSE_CODE_DICT = { 'A':'.-', 'B':'-...',
'C':'-.-.', 'D':'-..', 'E':'.',
'F':'..-.', 'G':'--.', 'H':'....',
'I':'..', 'J':'.---', 'K':'-.-',
'L':'.-..', 'M':'--', 'N':'-.',
'O':'---', 'P':'.--.', 'Q':'--.-',
'R':'.-.', 'S':'...', 'T':'-',
'U':'..-', 'V':'...-', 'W':'.--',
'X':'-..-', 'Y':'-.--', 'Z':'--..',
'1':'.----', '2':'..---', '3':'...--',
'4':'....-', '5':'.....', '6':'-....',
'7':'--...', '8':'---..', '9':'----.',
'0':'-----', ', ':'--..--', '.':'.-.-.-',
'?':'..--..', '/':'-..-.', '-':'-....-',
'(':'-.--.', ')':'-.--.-'
}
def encryption(message):
my_cipher = ''
for myletter in message:
if myletter != ' ':
my_cipher += MORSE_CODE_DICT[myletter] + ' '
else:
my_cipher += ' '
return my_cipher
# 모스 부호를 영어로 복호화하는 함수
def decryption(message):
message += ' '
decipher = ''
mycitext = ''
for myletter in message:
# 공백 여부 확인
if (myletter != ' '):
i = 0
mycitext += myletter
else:
i += 1
if i == 2 :
decipher += ' '
else:
decipher += list(MORSE_CODE_DICT.keys())[list(MORSE_CODE_DICT
.values()).index(mycitext)]
mycitext = ''
return decipher
def main():
my_message = "PYTHON-PROGRAM"
output = encryption(my_message.upper())
print (output)
my_message = ".--. -.-- - .... --- -. -....- .--. .-. --- --. .-. .- -- "
output = decryption(my_message)
print (output)
# main 함수 실행
if __name__ == '__main__':
main()
실행 결과
위 코드를 실행하면 암호화된 모스 부호와, 이를 다시 복호화한 원본 메시지가 순서대로 출력됩니다.
.--. -.-- - .... --- -. -....- .--. .-. --- --. .-. .- -- PYTHON-PROGRAM
이처럼 파이썬의 딕셔너리 자료구조를 활용하면 모스 부호 변환기를 몇 줄의 코드로 손쉽게 구현할 수 있습니다. 응용하면 사용자 입력을 받아 실시간으로 변환하는 프로그램이나, 소리 신호로 출력하는 프로젝트로도 확장할 수 있습니다.