Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- .net core 7
- 취약점
- LOB
- vtable
- edge trigger
- doupdate
- epoll
- mvwin
- wnourefresh
- packet filter
- packet flow
- 풀이
- ioctl
- Docker
- NAPT
- epoll_wait
- 어셈블리어
- REDIS
- .nret core 배포
- iptables
- BOF
- level trigger
- DOCKER-USER
- cbpf
- C언어
- Compiler
- architecture
- wrefresh
- rfc5508
- ncurses
Archives
- Today
- Total
Tuuna Computer Science
시저암호 암호화 복호화 소스 본문
어세블리어로 시저암호를 만들기위해 먼저 C로 소스코드를 작성함.
아래는 카이사르 암호 복호화, 암호화 과정인데 번호 2번은 작동하지 않는다.
대신 1번을 누르고 암호화 진행 후, 복호화도 같이 진행된다.
#include <stdio.h>
#include <string.h>
/*
카이사르 암호 만들기
암호화 & 복호화 만들기 키는 0~25 총 26개
암호화 과정 'P' - 'A' 해서 나온값에 key를 더하고 %26을 한다.
복호화과정에선 'P' - 'A' 해서 나온값에 key를 빼고 %26을 한다 만약 -가 나올경우 26을 더한다.
*/
void Crypto(char* plain, int key);
void Encrypto(char* crypto_text);
int main(void)
{
int i;
int len;
int check;
char buf[80];
int key;
printf("1. Crypto\n2. Encrypto\n: ");
scanf("%d",&check);
getchar();
printf("input your plain : ");
fgets(buf, sizeof(buf)-1, stdin);
len = strlen(buf);
buf[len-1] = '\0';
if(check == 1)
{
do{
printf("input your correct key(0~25) : ");
scanf("%d",&key);
}
while(key < 0 && key > 25);
Crypto(buf, key);
printf("%s\n", buf);
Encrypto(buf);
}
else if(check == 2)
{
Encrypto(buf);
}
return 0;
}
void Crypto(char* plain, int key)
{
int len = strlen(plain);
int i;
for(i=0;i<len;i++)
{
if(plain[i] == 0x20)
{
continue;
}
else
plain[i] = (plain[i] - 'A' + key) % 26 + 'A';
}
}
void Encrypto(char* text)
{
int len;
char print_plain[80];
int i;
int key;
int tmp;
for(key=0;key<26;key++)
{
strcpy(print_plain, text);
len = strlen(print_plain);
//printf("%s\n",print_plain);
for(i=0;i<len;i++)
{
if(print_plain[i] == 0x20)
{
continue;
}
print_plain[i] = (print_plain[i] - 'A' - key + 26)%26;
//printf("%d\n", print_plain[i]);
print_plain[i] += 'A';
//printf("%d\n", print_plain[i]);
}
printf("key : %d plain : %s\n",key, print_plain);
}
}
'C language' 카테고리의 다른 글
[C 언어] fgets함수 분석과, stdin 모험 (0) | 2019.03.31 |
---|---|
[안드로이드 게임]텐트와 나무 게임 알고리즘 분석해보기(머리로 풀지 말고 컴퓨터로 풀자) (22) | 2018.11.25 |
[C Language] 배열없이 문자열의 빈도수 구하기 (0) | 2018.10.26 |
배열을 대상으로 만든 여러 사용자 정의 함수 (헤더파일 제작) (0) | 2018.10.26 |
[C 언어] PE View tool 제작하기 (노가다 소스코드) (0) | 2018.09.05 |
Comments