비즈네르 암호를 구현해 봐요. 비즈네르 암호는 간단한 치환 암호예요.
암호는 문자열을 암호화, 즉 인코딩하는 데 사용하는 알고리즘이에요. 암호화되지 않은 문자열을 _평문_이라고 하고, 암호화된 문자열을 _암호문_이라고 해요. 평문을 암호문으로 바꾸는 것을 _인코딩_이라고 하고, 그 반대를 _디코딩_이라고 해요.
_치환 암호_에서는 평문의 각 글자가 _키_의 도움을 받아 계산된 암호문 글자로 바뀌어요. (바뀐 글자가 원래 글자와 같을 수도 있어요.)
이 암호에서 키는 "abcd"처럼 소문자 여러 개로 이루어진 문자열이에요.
평문의 각 글자는 키의 해당 글자에 따라 정해지는 거리만큼 _이동_하거나 _회전_해요.
키에서 "a"는 0만큼 이동한다는 뜻이에요(즉, 이동하지 않아요).
키에서 "b"는 1만큼 이동한다는 뜻이에요.
키에서 "c"는 2만큼 이동한다는 뜻이고, 이런 식이에요.
평문의 첫 번째 글자에는 키의 첫 번째 글자를 사용하고, 두 번째 글자에는 키의 두 번째 글자를 사용하는 식이에요. 평문이 끝나기 전에 키의 글자를 다 써버리면 키의 처음으로 돌아가서 다시 사용해요.
키가 "dddddd"처럼 한 글자로만 이루어져 있다면 평문의 모든 글자가 같은 거리만큼(이 예에서는 3만큼) 이동해요.
이 경우 회전 암호나 이동 암호(시저 암호라고도 해요)와 같아져요.
예를 들어 평문 "iamapandabear"는 "ldpdsdqgdehdu"가 돼요.
키가 "a"만(한 번 이상) 포함한다면 이동 거리가 0이라서 암호문이 평문과 같아요.
그런데 보통은 키가 이보다 더 복잡해요!
키가 "abcd"라면 평문의 글자들은 0, 1, 2, 3만큼 이동해요.
평문이 "hello"라면 5번 이동해야 하므로 키가 다시 처음으로 돌아가서, 이동 거리는 0, 1, 2, 3, 0이 돼요.
이 이동 거리들을 "hello"의 글자들에 적용하면 "hfnoo"가 돼요.
키가 주어지지 않으면 라틴 알파벳의 무작위 소문자 100개 이상으로 이루어진 키를 만들어요.