어제는 진짜 정신이 나가서 못 만들었지만
결국은 만들었다.
어제 있던 댓글 중 하나가
'카이사르 암호가 뭐에요?' 라는 질문이 있어서 짧게 설명하고 넘어가자면
알파벳을 일정한 수 만큼 간격을 띄워서 (abcdefg -> cdefghi)
암호화 시키는 것을 말한다.
코드
어떤 문자열을 입력받으면 그 문자 하나하나를 int 타입으로 저장시켜
아스키코드로 저장시킨 다음 몇 칸씩 앞/뒤로 옮길지 설정한 대로
아스키코드를 빼거나 더해주었다.
int형으로 저장시킨 아스키코드들은 %c로 출력해주면 된다.
#include <stdio.h>
int frwd (int a, int b) { //a: ASCII / b: cnge
if (a == 0) {
return 0;
}
if ((a - b) < 97) {
b += (a - 97);
a = (122 - b);
return (a);
}
else {
a -= b;
return (a);
}
}
int bcwd (int a, int b) { //a: ASCII / b: cnge
if (a == 0) {
return 0;
}
if ((a + b) > 122) {
b -= (123 - a);
a = 97 + b;
return (a);
}
else {
a += b;
return (a);
}
}
int main() {
int cnge = 0, pm = 0, N = 0; //cnge: 얼마나 앞당길지 / pm: 앞으로, 뒤로
char str[100] = { 0 };
int ASCII[100] = { 0 };
printf("암호를 얼마나 앞(1)/뒤(2) 당길지 선택 ex) 2 1 -> 2칸 앞으로: \n");
scanf("%d %d", &cnge, &pm);
printf("\n문자열을 입력하세요 (조건: Small Eng, 100, space X) \n");
scanf("%s", str);
for (int q = 0; q < 100; q++) {
ASCII[q] = str[q];
if (pm == 1) {
ASCII[q] = frwd(ASCII[q], cnge);
}
else if (pm == 2) {
ASCII[q] = bcwd(ASCII[q], cnge);
}
else {
printf("\nerror");
return 0;
}
}
for (int q = 0; ASCII[q] >= 97 && 122 >= ASCII[q]; q++) {
N++;
}
for (int q = 0; q < N; q++) {
printf("%c", ASCII[q]);
}
return 0;
}
일단 처음에 몇 칸씩 앞(1)/뒤(2)로 입력할 지 입력을 받아준다.
(두번 째 입력에서 1, 2 이외의 수를 입력하면 "error"가 뜬다.)
2 1 //ex
그 다음은 소문자 영어(space X, 100이하) 문자열을 입력받는다
helloworld //ex
예시에선 1을 입력했으므로 frwd(앞으로 땡김) 함수를 실행시킨다.
bcwd(뒤로 땡김)과 frwd 함수가 별 차이는 없다.
ASCII[q] 와 cnge 값을 주고, ASCII를 cnge 만큼 뺴거나 더한다.
만약 'a' 나 'z'를 넘어간다면
b += (a - 97); //frwd
b -= (123 - a); //bcwd
를 한 다음 계산한다.
ASCII[q] != 0 일 때까지 ASCII를 문자 형태로 출력한다.
fcjjmumpjb //ex
<실제 실행 결과>
이렇게 해서 카이사르 암호 해독기를 만들어 보았다.
(혹시 제가 발견하지 못한 오류가 있으면 댓글로 알려주시면 감사할 것 같습니다!)
다른 글 들 보기
2022.07.17 - [Diary/그 외 코딩 잡 지식] - 프로그래머들에게 추천하는 코딩 폰트, D2coding!
2022.07.17 - [Let's Make Series/Let's Make Drone] - 날기 위해 필요한 것 [Let's Make Drone - Epi 2]
2022.07.17 - [Let's Make Series/Let's Make Drone] - 방학 동안의 대규모(?) 프로잭트 [Let's Make Drone - Epi 1]
'Diary > 코딩 갖고 놀기' 카테고리의 다른 글
카이사르 암호를 C언어로 번역시켜 보았다 (미완 ver) (4) | 2022.07.21 |
---|