트랙
/
Haskell
Haskell
/
연습 문제
/
아트바시 암호
아트바시 암호

아트바시 암호

보통

지침

중동에서 고안된 고대 암호화 방식인 아트바시 암호를 구현해 봐요.

아트바시 암호는 알파벳의 모든 글자를 뒤집어서 결과 알파벳이 거꾸로 되도록 하는 단순 치환 암호예요. 첫 번째 글자는 마지막 글자로, 두 번째 글자는 뒤에서 두 번째 글자로 바뀌는 식이에요.

라틴 알파벳에 적용한 아트바시 암호는 다음과 같아요:

Plain:  abcdefghijklmnopqrstuvwxyz
Cipher: zyxwvutsrqponmlkjihgfedcba

가능한 키가 하나뿐이고 단순한 단일 알파벳 치환 암호이기 때문에 아주 약한 암호예요. 하지만 이 암호가 쓰이던 시절에는 별문제가 아니었을 수도 있어요.

암호문은 고정된 길이의 묶음으로 나누어 쓰는데, 전통적인 묶음 크기는 다섯 글자예요. 숫자는 그대로 두고, 구두점은 제외해요. 이렇게 하는 이유는 단어 경계를 기준으로 내용을 추측하기 어렵게 만들기 위해서예요. 모든 텍스트는 소문자로 인코딩해요.

예시

  • test를 인코딩하면 gvhg가 나와요
  • x123 yes를 인코딩하면 c123b vh가 나와요
  • gvhg를 디코딩하면 test가 나와요
  • gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt를 디코딩하면 thequickbrownfoxjumpsoverthelazydog가 나와요

힌트

decode와 encode 함수를 구현해야 해요. 이 함수들은 Atbash 암호를 사용해 String을 디코딩하고 인코딩해요. 타입이 확실하지 않다면 제공된 시그니처를 사용해도 되지만, 그것이 창의성을 제한하도록 두지는 마세요.

이 연습 문제는 텍스트 데이터를 다뤄요. 역사적인 이유로, Haskell의 String 타입은 문자들의 리스트인 [Char]와 같은 의미예요. 텍스트 데이터를 더 효율적으로 다루려면 Text 타입을 사용할 수 있어요.

선택 사항으로, 이 연습 문제를 확장해서 다음과 같이 해볼 수 있어요.

import qualified Data.Text as T
import           Data.Text (Text)
  • Text 타입을 사용하고(예: decode :: Text -> Text), Data.Text 컴비네이터를 예를 들어 T.pack처럼 참조해요.
  • Data.Text 문서를 찾아봐요.
  • Atbash.hs에서 모든 String을 Text로 바꿔요. 즉:
decode :: Text -> Text
decode cipherText = ...

encode :: Text -> Text
encode plainText = ...

이 부분은 전적으로 선택 사항이에요.


출처

Wikipedia링크가 새 창이나 탭에서 열려요
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Haskell Exercism

아트바시 암호 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Haskell 트랙을 연습 문제 107개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.