미코는 친구 슬라브코에세 메시지를 받았다.
유명한 암호학자인 슬라브코는 미코에게 보낼 메시지를 암호화하는 것을 좋아한다. 이번에는 One Time Pad(OTP) 기법을 사용하기로 맘 먹었다. OTP 는 바르게 사용되어지면 뚫을수가 없다는 것을 안다.
그러나 그는 미코가 불가능한 일로 머리가 터지는 것을 원하지 않는다. 그래서 그는 메시지에 약간의 힌트를 주어 보내기로 했다.
미코는 슬라브코의 원문은 단지 소문자로('a' - 'z'), 마침표 '.' 와 공백 ' ' (ASCII 3210). 으로 이루어져 있고, 또한 슬라브코는 키로 숫자 0 ~ 9 를 사용한다 것을 안다.
장고 끝에 그는 원문의 모든 공백의 위치와 마침표의 위치를 알아냈고, 당신에게 이 것을 자동으로 할 수 있는 프로그램을 작성하도록 도움을 요청 했다.
미코는 전에 한 번 접해서 OTP 암호가 어떻게 동작하는지는 안다.
간단한 예시를 보자. 0120123 을 키로 문자열 "abc def" 를 암호화 하기를 원한다.
abc efg 0120123 |
61 62 63 20 65 66 67 30 31 32 30 31 32 33 |
51 53 51 10 54 54 54 |
Start ASCII | 16 진수 | 암호 화된 문서 |
처음 당신은 이 키와 원문을 16 진수 숫자로 변환한다. 다음 당신은 그들의 줄을 맞춘 후 각 쌍에 XOr 연산을 수행한다.
이렇게 해서 만들어지는 나열이 암호화 문서이다.
입력 7 51 53 51 10 54 54 54 출력 ---.--- 입력 7 53 53 51 54 54 51 10 출력 ------.
출처:coci