본문 바로가기
안드로이드 앱

영문 또는 한글 텍스트에 비밀번호 걸기(텍스트 암호화)

by 젤리아드 2021. 6. 29.
반응형

예를 들어 "이 글은 비밀입니다"

라는 텍스트에 비밀번호를 걸고 이 비밀번호를 아는 사람한테만

원래 텍스트(이 글은 비밀입니다)를 알 수 있게끔 하는 방법에 대해 알아보겠습니다.

 

만약 "이 글은 비밀입니다"라는 문장에 7584라는 비밀번호를 걸면

이 텍스트는 "혇 럁겘 얜쪓텆쏄번" 이런 식의 의미를 알 수 없는 텍스트로 변경이 되고

이 텍스트는 반드시 7584라는 비밀번호를 알아야

"이 글은 비밀입니다"라는 텍스트로 다시 복원할 수 있습니다.

 

이 방법의 원리는 변형된 카이사르(업그레이드된 카이사르 방식)의 원리로 가능하게 할 수 있습니다.

어려워 보이지만 방법을 알고 나면 매우 쉽습니다.

 

카이사르에 대해 이미 알고 계시다면 기초 설명은 넘기고 다음 단락부터 보시면 됩니다.

 

카이사르(시저) 암호 기초 

카이사르는 글자를 일정한 거리만큼 밀어내면서 바꾸는 방식입니다.

예를 들어 A를 1만큼 밀어내면 B가 되고 2만큼 밀어내면 C가 됩니다.

A →1 B

A →2 C

거꾸로 밀어내면

A ←1 Z

A ←2 Y

(이제 위에 1이나 2처럼 밀어낸 거리를 ROT으로 표기하겠습니다)

 

이것을 한글에 적용하면

ㄴ →1 ㄷ

ㅛ →1 ㅜ

이런 식입니다.

 

"TEST" 란 단어를 1만큼 밀어내면 "UFTU"가 됩니다.

 

13만큼 밀어내면 "GRFG"가 됩니다.

밀어낼 때 Z 다음은 다시 A가 되면서 순환합니다.

 

만약 "GRFG"라는 텍스트만 주어졌을 때

원래의 텍스트인 "TEST"를 알아내려면

"GRFG"가 13만큼 이동했다는 사실을 알아야 합니다.

이 사실을 알면 "GRFG"를 다시 13만큼 뒤로 밀어내서 "TEST"를 구할 수 있습니다.

 

그러나 13만큼 이동했다는 사실을 모른다면

1부터 뒤로 밀면서 원래의 텍스트를 찾아야 합니다.

"GRFG"

←1 FQEF

←2 EPDE

←3 DOCD

←4 CNBC

←5 BMAB

←6 ALZA

←7 ZKYZ

←8 YJXY

←9 XIWX

←10 WHVW

←11 VGUV

←12 UFTU

←13 TEST

이렇게 13번째 시도만에 원래의 텍스트인 TEST를 찾았습니다.

 

하지만 이 방식에는 치명적인 단점이 있습니다.

최대 25번만 시도하면 원래의 텍스트를 찾을 수 있기 때문입니다.

알파벳의 경우 알파벳의 총개수는 26개이기 때문에

A →26 A (1바퀴 순환하여 ROT를 26으로 하면 같은 알파벳)

ROT26부터는 의미가 없고 의미가 있는 최대 ROT은 25가 됩니다.

A →25 Z

따라서 카이사르 방식은 최대 25번만 시도하면(영문의 경우)

원래의 텍스트를 알아낼 수 있으므로 보안성이 약합니다.

 

그래서 보안성을 높이려면 기존 카이사르 방식을 변형해서 업그레이드시켜야 합니다.

 

기존 카이사르 방식을 변형하여 업그레이드한 방식

기존 카이사르 방식은 ROT을 지정해 주면 텍스트의 모든 글자가 해당 ROT으로만 변경됩니다.

 

예)

AAAAA →1 BBBBB

 

단점을 보완시키는 방법은 문자마다 다른 ROT를 지정해 주면 됩니다.

첫 번째 문자에 ROT1, 두 번째 문자에 ROT2를 지정하면

AA →12 BC

이렇게 됩니다.

 

* 기존 카이사르 방식

AA →12 OO (모든 알파벳이 12만큼 이동)

 

* 업그레이드된 방식

AA →12 BC (첫 번째 문자는 1, 두 번째 문자는 2만큼 이동)

 

AAAAA →12 BCBCB

(첫 번째 문자는 1만큼, 두 번째 문자는 2만큼, 세 번째 문자부터 다시 1만큼.... 순환 반복 이동)

 

AAAAA →1234 BCDEB

위처럼 숫자 4개를 지정해 주면 텍스트에 비밀번호 4자리를 부여한 것과 같은 효과가 납니다

 

즉, "BCDEB" 텍스트만 주어졌을 때 원래의 텍스트인 "AAAAA"를 알아낼 수 없습니다.

원래의 텍스트를 알아내려면 반드시 1234란 비밀번호를 알아야 합니다.

 

ROT 1,2,3,4를 거꾸로 이동하면 원래의 텍스트인 "AAAAA"를 얻을 수 있습니다.

BCDEB ←1234 AAAAA

 

이것이 텍스트에 비밀번호를 걸 수 있는 원리입니다.

 

TEST →7584 AJAX

AJAX ←7584 TEST

 

하지만 한글이나 길고 복잡한 텍스트에 비밀번호를 걸 때

이렇게 일일이 계산해서 거는 건 쉽지 않은 일입니다.

이 문제는 프로그램을 이용해서 해결할 수 있습니다.

 

카이사르 암호 생성기 프로그램 다운로드 링크

Play스토어

https://play.google.com/store/apps/details?id=com.sinsoft.caesarpassword

 

카이사르 암호 생성기 - Google Play 앱

사용자가 입력한 텍스트를 카이사르 방식으로 암호화된 텍스트로 변경합니다

play.google.com

원스토어

https://m.onestore.co.kr/mobilepoc/apps/appsDetail.omp?prodId=0000756599

 

카이사르 암호 생성기 - 원스토어

사용자가 입력한 텍스트를 업그레이드된 카이사르 방식으로 암호화한 텍스트로 변경합니다

m.onestore.co.kr

 

업그레이드 카이사르 방식을 복잡한 계산 없이 쉽게 적용하기

이제 처음에 언급했던 "이 글은 비밀입니다"에 7584라는 비밀번호를 걸어 보겠습니다.

먼저 카이사르 암호를 생성할 수 있는 프로그램을 준비합니다.

 

↓ 프로그램 첫 화면

앱 첫 화면에서 텍스트 암호화 버튼 누르기
텍스트 암호화 버튼

↑ 우측 하단에 있는 "텍스트 암호화" 버튼을 누릅니다.

 

↓ 텍스트 입력 칸에 암호화할 텍스트를 입력합니다.

암호화할 텍스트 입력 위치
텍스트 입력 위치
암호화할 텍스트 입력 후 다음 단계 버튼 누르기
암호화할 텍스트 입력

↑ 여기서는 "이 글은 비밀입니다"라는 문장을 입력했습니다.

(다른 텍스트를 입력해도 됩니다)

 

비밀번호 입력 위치
비밀번호 입력 위치
비밀번호를 입력한 모습
비밀번호 입력

↑  여기서는 7584를 입력했습니다.

(다른 비밀번호를 입력해도 괜찮습니다)

비밀번호를 입력하면 위에 의미를 알 수 없는 이상한 텍스트가 표시됩니다.

(혇 럁겘 얜쪓텆쏄번)

 

이 텍스트가 업그레이드된 카이사르 방식으로 변경된 텍스트입니다.

"이 글은 비밀입니다" →7584 "혇 럁겘 얜쪓텆쏄번"

 

이제 "이 글은 비밀입니다"라는 텍스트에 7584라는 비밀번호를 걸었습니다.

그리고 암호화된 텍스트는 "혇 럁겘 얜쪓텆쏄번" 입니다.

 

비밀번호를 모른다면 "혇 럁겘 얜쪓텆쏄번" 은 아무 의미 없는 텍스트입니다.

하지만 비밀번호를 알면 암호화된 텍스트에서 원래 텍스트인 "이 글은 비밀입니다"를 뽑아낼 수 있습니다.

 

앱 첫 화면에서 텍스트 복호화 버튼 누르기
텍스트 복호화 버튼
암호문 입력 후 다음 단계 버튼 누르기
암호문 입력
비밀번호 입력 후 비밀번호 적용 버튼 누르기
비밀번호 입력

↑ 암호문을 입력하고 비밀번호 7584를 입력하면 원래의 텍스트인 "이 글은 비밀입니다" 텍스트가 표시됩니다.

(다른 비밀번호로 암호화했다면 해당 비밀번호를 입력합니다)

 

한글 카이사르도 영문 카이사르와 원리는 같습니다.

이렇게 한글이나 장문의 긴 텍스트는 프로그램을 사용하여 쉽게 비밀번호를 걸 수 있습니다.

728x90

댓글