C언어 암호화 프로그램 - ceon-eo amhohwa peulogeulaem

배열을 사용해서 키 값과 암호화할 단어를 입력해서

암호화를 하고 복호화를 해주는 프로그램

// 암호 전달
#include <stdio.h>

void main(void)
{
	char str[50];
	char text[50];
	char str2[50];
	int i = 0;
	int key;

	printf("암호 단어 입력: ");
	scanf("%s", str);
	printf("키 값 입력: ");
	scanf("%d", &key);
	printf("입력된 단어는 %s입니다.\n", str);

	while (str[i] != '\0')
	{
		text[i] = str[i] + key;
		i++;
	}
	text[i] = '\0';

	printf("입력된 단어를 암호화하면 %s입니다.\n", text);

	i = 0;
	while (text[i] != '\0')
	{
		str2[i] = text[i] - key;
		i++;
	}
	str2[i] = '\0';

	printf("입력된 단어를 복호화하면 %s입니다.\n", str2);
}

문자에 해당되는 아스키코드에 키 값을 더해서 암호화하고

암호화된 아스키코드에 키 값을 빼서 복호화하는 매우 간단한

프로그램이다.


숫자를 입력받고 비교해서 큰 순서대로 정렬해서 출력하는 프로그램

// 크기 비교하고 큰 순서대로 정렬하기
#include <stdio.h>

void main(void)
{
	int i, j;
	int tmp;
	int n[5];

	printf("숫자 5개 입력: ");
	scanf("%d %d %d %d %d", &n[0], &n[1], &n[2], &n[3], &n[4]);

	printf("정렬 전: %d %d %d %d %d\n", n[0], n[1], n[2], n[3], n[4]);

	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 4; j++)
		{
			if (n[j] < n[j + 1])
			{
				tmp = n[j];
				n[j] = n[j + 1];
				n[j + 1] = tmp;
			}
		}
	}
	printf("정렬 후: %d %d %d %d %d", n[0], n[1], n[2], n[3], n[4]);
}

입력되는 숫자가 5개라서 모두 비교해서 완벽히 정렬하기 위해서는

for문을 중첩으로 각각 4번 반복해야한다.


절대값 크기를 비교해서 정렬하는 프로그램

위에서 약간 바꾸면 된다.

// 절대값 정렬
#include <stdio.h>

void main(void)
{
	int i, j;
	int tmp;
	int n[5];

	printf("숫자 5개 입력: ");
	scanf("%d %d %d %d %d", &n[0], &n[1], &n[2], &n[3], &n[4]);

	printf("정렬 전: %d %d %d %d %d\n", n[0], n[1], n[2], n[3], n[4]);

	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 4; j++)
		{
			if (abs(n[j]) < abs(n[j + 1])) // abs로 바꿈
			{
				tmp = n[j];
				n[j] = n[j + 1];
				n[j + 1] = tmp;
			}
		}
	}
	printf("정렬 후: %d %d %d %d %d", n[0], n[1], n[2], n[3], n[4]);
}

C언어로 만든 간단한 RSA.

안녕하세요.

오늘은 공개키 암호 알고리즘 중 하나인 RSA 코드입니다.

그냥 공부하면서 대충 만든 겁니다.

  • 특정 파일/디렉토리 명을 주면 모든 정보를 출력
  • 권한을 700으로 변경하는 프로그램

C언어 암호화 프로그램 - ceon-eo amhohwa peulogeulaem

코드

코드는 다음과 같습니다.

#include<stdio.h>
/*ras*/
long pow_(long i,long j,long k){
	double l,temp,p=1;
	for(temp=0;temp < j ; temp++){
		p=(p*((double)i));
		l=(long)(p/k); //소수점 삭제.
		p=p-(l*k);
	}
	return (long)p;
}
int encryption(int input,int e, int n){
	int i=pow_(input,e,n);
	printf("입력받은 수의 rsa암호화 결과= %d\n",i);
	return i;
}
int Decryption(int input,int d, int n){
	int i=pow_(input,d,n);
	printf("암호화된 수의 rsa복호화 결과= %d\n",i);
	return i;
}
int main(){
	int input;
	scanf("%d",&input);
	int p=17,q=11;
	int e=7, d=23, N=p*q;
	input=encryption(input,e,N);
	Decryption(input,d,N);
	return 0;
}

알고리즘.

두 소수 p와 q를 선택한다.

(위의 코드에서는 17과 11을 선택.)

φ(N)=(p-1)(q-1)=160

160보다 작으면서 φ(N)과 서로소인 수 e를 선택한다.

(위의 코드에서는 7.)

d<160이면서 demodφ(N)=1인 수 d를 결정한다.

(위의 코드에서는 d*7mod160=1이므로 23이 d가 된다.)

공개키={7,187}, 개인키={23,187}이 된다.

실행결과.

그래서 위의 코드를 실행해보면 이런 결과가 나온다.

C언어 암호화 프로그램 - ceon-eo amhohwa peulogeulaem

ROT13이라는 문자암호화 알고리즘을 만드려면

우선 ROT13이 뭔지 알아야겠죠?

ROT13(Rotate by 13)은 단순한 카이사르 암호의 일종으로 영어 알파벳을 13글자씩 밀어서 만든다. 흔히 ROT-13 혹은 rot13이라고도 쓴다. 예를 들어서 'I LOVE YOU'를 ROT13으로 암호화하면 'V YBIR LBH'가 된다. 이 방법은 유즈넷을 비롯한 온라인 게시판에서 퍼즐의 정답이나 스포일러 등과 같이 미리 보기를 원치 않는 내용을 암호화하는 데 자주 사용된다.

C언어 암호화 프로그램 - ceon-eo amhohwa peulogeulaem

https://ko.wikipedia.org/wiki/ROT13

그림을 보니까 쉽게 이해가 되죠?

입력한 알파벳에서  a부터 m까지는 13을 더하고, n부터 z까지는 13을 빼면 됩니다.

문자입력은 getchar를 사용해서 한글자씩 입력받고

putchar로 한글자씩 출력합니다.

그리고 입력한 문자가 대문자인지 소문자인지 판단하려면 

if문이 필요합니다.

if ((c >= 'A' && c <= 'Z')) //대문자

else if ((c >= 'a') && c <= 'z') //소문자

이렇게하면 대문자와 소문자를 거를수 있죠

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

32

33

34

35

36

#include <stdio.h>

int main(void)

{

int c;

int t;

while ((c = getchar()) != EOF) //컨트롤 + z는 종료

{

if ((c >= 'A' && c <= 'Z')) //대문자

{

if ((t = c + 13) <= 'Z')

putchar(t);

else

{

t = c - 13;

putchar(t);

}

}

else if ((c >= 'a') && c <= 'z') //소문자

{

if ((t = c + 13) <= 'z')

putchar(t);

else

{

t = c - 13;

putchar(t);

}

}

else

putchar(c); //띄어쓰기

}

printf("프로그램종료");

return 0;

}

cs