반응형
프로그램을 작업하다 보면 수열의 합 또는 수열의 공식을 적용해야하는 경우가 많다.

[ 1 ] 등차수열

1  /  11  /  21  /  31  / 41 ~~~~

이런 값 기준의 경우 공식을 유도가능하다.

a : 초기값 | n : 차수 | d : 공차

f(n) = a + ( n - 1 ) * d 이다.
반응형
반응형


[ 서론 ]

Base64인코딩은 말그대로 문자열을 인코딩하기위해 사용되는 방식이다. 좀더 쉽게 설명하자면 Base64 인코딩은 64개의문자를 이용하여 Binary 데이터를 ASCII 텍스트 데이터로 표현하기 위해 사용되는것이다.
암호학과 전혀 관련이 없는것이지만 암호화에서 많이사용한다. 그이유는 우리가 말하는 암호학의 여러 방법들은 대게 byte단위로 암호화 된다. byte단위의 binary 글자들은 사람이 보기에 분별하기 어려운글자가
많으므로 base64 인코딩을 하여많이사용한다.

예를들어보면 ACE 암호화를 이용하여 인코딩을 할떄
(원문) - > ACE암호화 -> BASE64 인코딩       <- BASE64 디코딩 <- ACE복호화 < - 원문
이렇게 중간에서 데이터를 주고받을때 식별가능하도록 만들기위해 BASE64 인/디코딩 방식을 사용하는것이다.
초기 이메일의 경우 테스트만 서로 주고받다가 , 나중에 기술이 좀더 좋아지고나서부터 이미지, 파일첨부와 같은 기능이 생겨나기 시작하여 결국 base64 encoding/decoding이 고안되게 된것이다.
Base64 이외에도 다른 인/디코딩 방식들이 있는데 대표적인것으로 유닉스 환경에서 사용 되어지는 uuencode(Unix - to - Unix encode) 방식과 매킨토시에서 사용되는 BinHex방식이 있다. 두방식또한 64개의 문자를 가지고 표현하지만 , 시스템에 종속적이라는 단점이 있다.

[ 본론 ]
그럼 Base64인/디코딩을 어떻게 하는지방법을 알아보도록 하자. 사실  크게 다를것이 없다. 언어에서 우리가 한글자를 표현할때 8bit를 사용한다. 하지만 Base64에서는 6bit를 사용한다. 왜 6bit를 사용하는것일까? 아까도 말했듯이 64개의 문자를 이용해서 표현한다고 했다. 2^6승이 바로 64이기 때문에 최대 6bit의 글자로 표현할수 있는것이다.
또한8bit의 문자를 6bit로 표현하기위해서 8,6의 최소공배수인 24 bit만큼의 단위로 표현이된다.

즉 일반 문자 3글자를 base64에서는 4개의 문자로 해석한다는것이다.

Ascii Code표도 참조하도록 한다.



64개의 문자에는 어떠한 것이들이 있는지는 아래 표를 참조하도록 한다.



                출처 : http://blog.naver.com/kimsumin75?Redirect=Log&logNo=20056272734


위 처럼 64개의 문자를 사용한다.
그럼 실제 예제를 통하여 Base64에 대해 자세히 알아보도록 하자.
Base64로 인코딩의 경우 경우의 수는 3가지이다.
일반문자 3개 -> 4개로 바꾸는경우의 수이다.
(어떤수) % 3 -> 의 나머지로 올수 있는것은 무엇이 있겠는가? 0,1,2 이다. 그럼 이 3가지 조건에 대해
알아보도록 하자.

(1) 3n 의 경우로 정확하게 나누어 떨어지는 경우

COW 라는 글자를 BASE64 인코딩으로 바꾸어 보도록 하겠다.

문자              C                         O                      W
아스키코드     99                      111                    119
이진수           0 1 1 0 0 0 1 1      0 1 1 0 1 1 1 1     0 1 1 1 0 1 1 1

이 이진수를 6BIT 단위로 잘라보자

6BIT 단위로 자른것  : (011000)(110110)(111101)(110111)
십진수로 변환함 :          24         54         61        55  
BASE64 코드표 :           Y          2           9         3

그럼 저 십진수를 위의 코드표와 맵핑시켜본다.

즉 COW(일반문자) -> BASE64인코딩을 하면 Y293 이란ㄴ 4개의 문자로 표시가 가능하다.

(2) 3n+1의 경우
rang 이라는 글자를 Base64 인코딩으로 바꾸어 보도록 하자.

문자            r                          a                        n                        g
아스키코드   162                      141                      156                     147
이진수         10100010               10001101              10011100              10010011

이 이진수를 6bit 단위로 잘라본다.
6bit 단위로 자른것 : (101000 )( 101000 )( 110110 )( 011100 )( 100100 ) (110000 )( 000000 )( 000000 )
6bit로 했을때 총 24bit 단위가 되어야하는데 저건 넘어버린다. 그래서 24의 두배인 48을
기준으로 padding 처리해준다.

저걸 base64로 인코딩한다.
40 | 40 | 54 | 28 | 36 | 48 | 0 | 0

뒤에 보면 0 이라는 숫자는 순수하게 패딩영역으로 처리된것이다. 따라서 계산에 의한것이 아닌 패딩으로
채워진 부분은 = 으로 맵핑이 된다.

저걸 코드표에 맵핑시켜 보면 oo2ckw== 으로 변환이 된다. 끝 !!!

(3) 3n+2의 경우
super이라는 글자를 Base64 인코딩으로 바꾸어 보도록 하자.

문자          s                            u                      p                       e                    r
아스키코드 115                         117                   112                     101                 114
이진수       01110011                  01110101           01110000              01100101         01110010

이진수 단위를 6bit 단위로 잘라본다.
6bit 단위로 자른것 : (011100)(110111)(010101)(110000)(011001)(010111)(001000)(000000)
6bit 로 했을때 이것또한 24bit를 넘겨버려서 padding을 해주어 48bit를 맞추어준다.

해당핸 데이터를 10진수로 다시 바꾼다.
28 | 55 | 21 | 48 | 25 | 23 | 08 | 0

해당 십진수를 위의 Base64 인코딩 표로 맵핑시켜 보면 c3YwZXI= 가 된다.


와~ 정말길게썼다 일주일에 걸쳐서 짬짬히 틈을 내서 쓰니 뿌듯하기 그지없구나.ㅋㅋㅋ

이제 이걸 코드로 옮겼을때 어떻게 되는지 다음번 블로그 내용을 기대하시랏!!!

Base64란 대충 보면 어렵지만, 하나하나 좀 따져보면 어려운게 아니다.

개발을 하면서 이런저런거 가끔많이 접해 보기도 하지만, 하나하나 꼼꼼히 챙겨서 내꺼를 만들어야

나중에 유횽하게 써먹을 수 있고 돈도 많이 벌수 있다.

21살때부터 28살이 되던해까지 돈만 벌어야겠다는 생각으로 일을 했지만, 제자리 걸음이다. 과연 공부를 해서

돈을 많이 벌수 있는 시절이 올지 모르지만, 그날이 될때까지 ㅋㅋㅋ 성랑랑의 공부는 계속 될것이다.



                                                                                                   --- 2009.12.11 신라의 화랑 성랑랑씀 ---

반응형

+ Recent posts