Affine cipher 이해가 되지 않아요.
필자가 늘 이야기하듯이 programming 관련된 용어에 있어서는 항상 사전적 의미를 알고 가면 매우 좋다.
왜냐하면 영어를 기반으로 용어가 만들어졌기 때문에 용어의 의미를 알고 간다면 쉽게 이해할 수 있다.
Cipher이란 암호를 뜻한다. 쓰여 있는 암호를 Cipher라고 불렀으며, 반대로 DE를 앞에 붙임으로써 해독하다, 판독하다의 의미인 Decipher로 사용되는 단어이다.
Affine cipher는 암호 중에서도 알파벳을 숫자로 변환하고 다시 숫자를 알파벳으로 변환할 수 있는 기본적인 programming 암호 방식에 해당한다.
이러한 알파벳을 이용한 기본적인 암호는 Affine 말고도 Caesar's cipher나 Shift cipher 등 다른 방식의 알파벳 암호 구현 방식도 존재한다.
우선은 우리 멤버가 질문한 Affine cipher에 대해서 살펴보도록 하자.
참고로 절대 어렵지 않으니 겁먹지 말고 차근차근 따라오면 된다.
위의 공식은 Affine cipher에 대한 Encryption, 즉 암호화 공식이다.
한마디로 알파벳을 숫자로 변환할건데, 어떤 조건을 가지고 변환할 것인지를 저 공식을 통해 만들면 되는 것이다.
p는 알파벳이 변환된 숫자를 의미하며, a와 s를 통해 암호화되는 조건이 달라진다.
또한 mode 26은 알파벳이 26개로 이루어져 있기 때문에 알파벳으로 구현하는 암호라면 항상 mod 26인 셈이다.
Affine cipher의 encryption 순서는:
step1: 기존 단어를 알파벳 숫자로 변환해준다.
step2: Affine cipher의 공식에 적용한다.
step3: mod 26을 적용해준다.
step4: 알파벳 숫자를 다시 알파벳으로 변환해준다.
말보다는 예시를 살펴보자.
예를 들어 "HOOAI"를 해당 조건으로 암호화를 해본다고 가정한다면,
먼저 HOOAI에 대한 알파벳 숫자로 표시를 해준다.
H | O | O | A | I |
7 | 14 | 14 | 0 | 8 |
이런 식으로 공식을 적용하면 22,53,53,1,25가 산출된다.
22 | 53 | 53 | 1 | 25 |
여기서 53을 제외한 나머지는 26보다 숫자가 낮기 때문에 문제가 되지 않지만,
53은 26으로 나누어준 뒤에 남은 나머지를 표시해줘야 한다.
22 | 1 | 1 | 1 | 25 |
W | B | B | B | Z |
그러고 난뒤, 마지막으로 숫자에 맞는 알파벳으로 바꾸어주면 끝이 난다.
'Computer Science' 카테고리의 다른 글
[Programming] Denotational semantics examples (0) | 2020.10.08 |
---|---|
[Programming] 십진법의 소수점자리를 삼진법 소수점으로 변환하기 (0) | 2020.09.17 |
[Q&A/Programming] 프로그래머는 영어가 필수인가요? (0) | 2020.01.12 |
[Q&A/Programming] 객체(Objects)란? (0) | 2020.01.10 |
[Programming] Function에 따른 Flow charts examples (0) | 2020.01.09 |
댓글