이진수가 엄청나게 길게 나열되어 있다.
아스키 코드가 8비트인것을 (7비트 값 + 데이터의 에러를 탐지하기 위한 패리티 비트) 생각하여 8비트로 각각 자른뒤 아스키코드로 변환해본다.
function p () {
var str = "010011100101011001000011010101000100011001000100010101100010000001001011010001100010000001001010010011000100010101011010010001010101001001001011010100100100101000100000010100100100010101010101001000000100101101000110010101010101001001010000001000000101101001001010001000000101001000100000010110000100011001000110010101010010000001010101010100100101000000100000010100100100010101010101001000000101001001001100010010110101100101000010010101100101000000100000010110100100101000100000010001110100001101010010010110100101010101010100010010110101011101011010010010100100110101010110010010010101000001011001010100100100100101010101";
for(var i = 0; i < str.length; i+=8) {
var b = str.substring(i, i+8); // end 이전까지임.
process.stdout.write(String.fromCharCode(parseInt(b, 2)));
}
}
p();
아래 문자가 도출된다.
NVCTFDV KF JLEZERKRJ REU KFURP ZJ R XFFU URP REU RLKYBVP ZJ GCRZUTKWZJMVIPYRIU
이 문자열은 문자 치환 암호화인 카이사르 암호화가 되어있다.
카이사르 암호화
카이사르 암호(Caesar cipher) 또는 시저 암호는 암호학에서 다루는 간단한 치환암호의 일종이다.
암호화하고자 하는 내용을 알파벳별로 일정한 거리만큼 밀어서 다른 알파벳으로 치환하는 방식이다.
예를 들어 3글자씩 밀어내는 카이사르 암호로 'COME TO ROME'을 암호화하면 'FRPH WR URPH'가 된다.
꼭 띄어쓰기가 있어야만 카이사르 암호화인 것을 알 수 있는건 아니지만, 어느정도 유추하는데 도움이 된다.
말 그대로 특정 크기를 기반으로 문자를 밀어내는 방식이다.
A ~ Z 까지 문자를 밀어내며, Z를 넘어가게 되면 다시 A로 돌아오게 해줘야 한다.
그리고 공백은 치환에서 제외한다. ( 제작자의 의도에 따라 알파벳 형식만이 아니고, 전체 아스키코드에서 움직이는 것이라면 쓰일 수도 있다)
일단 문제에서는 대문자 알파벳만 쓰이고 공백이 있으므로 알파벳끼리만 치환해주고 공백은 그대로 유지시킨다(공백은 다른문자들과 치환규칙성이 없어보이므로)
// 카이사르 암호화
#include <stdio.h>
#include <string.h>
int main() {
char a[] = "NVCTFDV KF JLEZERKRJ REU KFURP ZJ R XFFU URP REU RLKYBVP ZJ GCRZUTKWZJMVIPYRIU";
char p;
int c = 1;
while(c <= 90 - 65) { // A ~ Z까지의 크기
for(int i = 0; i < strlen(a); i++) {
if(a[i] == 32) { // 공백은 뛰어넘자
printf("%c", a[i]);
} else {
p = a[i] + c;
if(p > 90) {
p = p - 90 + 64; // Z를 넘어가면 A부터 시작되게끔.
}
printf("%c", p);
}
}
putchar('\n');
c++;
}
}
많은 결과값이 나오는데, 그 중에 문자가 말이 되는 결과가 있다. 그것을 Auth에 넣으면 끝.
하.. 이 문제 풀다가 ㅜㅜ 실수로 코드를 다 지워버려서, 알고리즘/자료구조 코드가 모두 날아갔ㄷㅇ..
'[포렌식] > [SuNiNaTaS]' 카테고리의 다른 글
[SuNiNaTaS] 26번 (0) | 2020.12.14 |
---|---|
[SuNiNaTaS] 21번 (0) | 2020.12.13 |
[SuNiNaTaS] 18번 (0) | 2020.12.11 |
[SuNiNaTaS] 15번 (0) | 2020.12.10 |
[SuNiNaTaS] 14번 (0) | 2020.12.10 |