진법 변환은 해킹 / 보안에서 무조건은 아니지만 쓰일 수 있는 부분 중 하나이다.
그래서 이번 게시물에서는 진법 변환에 대해 한번 알아보려 한다.( 알고리즘 측면이 아닌 가장 기본적 측면으로 )
고등 수학까지 배운다면 기본적으로 2진법을 10진법으로 변환하는 법은 아주 잘 알 것이다.
2진수 -> 10진수 변환
(1011)2 = (1×23) + (0×22) + (1×21) + (1×20) = (11)10
예를들어 위와 같이 1011이면 10진수로 11임을 바로 확인 할 수 있다.
하지만 1011.101은 어떠한가?
(1011.101)2 = (1 x 23) + (0 x 22)+ (1 x 21) + (1 x 20) + (1 x 2-1) + (0 x 2-2) + (1 x 2-3)
= 8+ 0 + 2 + 1 + 0.5 + 0 + 0.125
= 11.62510
아직 이러한 소수점에 대해서는 익숙하지 않을 것이다.
.101부터는 다음과 같다. 소수 첫째 자리부터 세번째 자리까지 순서대로 n * 2-1 ,n * 2-2 ,n * 2-3 순서로 곱해진다.
(n은 1또는 0 (이진수에서))
즉, 20 까지 온 후, 그다음 부터는 음수 값으로 곱하면 된다.
8진수에서 10진수 또한 같은 방식으로 행하면 된다.
8진수 -> 10진수 변환
(123)8 = (1×82) + (2×81) + (3×80) = 64 + 16 + 3 = (83)10
16진수 -> 10진수 변환
(AB)16 = (A×161) + (B×160) = 160 + 11 = (431)10
이와 반대로 10진수에서 n진수로 가는 방식은 다음과 같다.
10진수 ( 소수점 포함 ) -> 2진수 변환
하지만 소수점 즉, 56
.25에 대해 2진법으로 바꾸는 법에 대해서는 제대로 알아 본 적이 없을 것이다.
정수형 자리 수는 원래 구하던 대로 구하고, 아래 소수점 자리는
n진법이면 소수점 자리에 *n을 계속하여 1이 될 때 까지 반복한다.
즉 0.25에 2진법이니 2를 곱하여 1이 될때까지 반복하여 0 1을 구한다.
따라서 56.25는 2진법으로 111000.001이다.
2진수 ( 소수점 포함 ) -> 10진수 변환
이것을 다시 10진법으로 바꾸면
32 + 16 + 8 + 0 + 0 + 0 + 1 * 2-2 이므로 56.25이다.
2진수 -> 8진수 변환
이 변환 방식은 2진수에서 10진수 변환 후, 10진수에서 8진수로 가는 방법도 존재하지만,
다른 변환 방식에 대해 소개 해 주고자 한다.
즉, 이진수 1110100110을 3자리 씩 묶어서 8진수의 값이 나오도록 한다. (3자리씩 묶으면 111일때 최대 7이므로 8진수에 이용 가능하다.)
가장 앞에 00이 두개 나타난 이유는 8진수의 자리수를 맞춰 주기 위해서이다.
따라서 001 / 110 / 100 / 110 을 나누면 1 6 4 6이 나오고 그것이 곧 8진수 값이다.
8진수 -> 2진수 변환
눈치를 챘을지 모르겠지만, 그냥 역으로 돌리면 된다.
1646을 1 / 6 / 4 / 6 으로 본 뒤, 001 / 110 / 100 / 110 으로 나타내어 최종적으로 1110100110으로 바꾸면 된다.
2진수 -> 16진수 변환
'Applied > Hacking and Security' 카테고리의 다른 글
RSA 암호 알고리즘 (9) | 2018.03.14 |
---|---|
2의 보수, 보수(Complements)를 이용한 값 구하기 (6) | 2016.10.20 |
콘솔창에서의 인터넷 창 테러 (0) | 2016.08.14 |
윈도우 메세지 후킹(Window Message Hooking) (5) | 2016.08.01 |
Keyczar - 암호화 Open API (0) | 2016.07.19 |