본문 바로가기

암호학

비즈네르 암호 소스

알파벳 소문자 a~z까지를 대상으로 비즈네르 암호를 통한 암호화, 복호화를 수행함.

int main(){
	int i = 0;
	int j = 0;
	int key_size = 0;
	int str_size = 0;
	int select = 1;

	char *str = (char *)malloc(sizeof(char) * 50);
	char *key = (char *)malloc(sizeof(char) * 16);

	printf("암호문 또는 평문을 입력 : ");
	gets(str);

	printf("암호는 1번, 복호는 2번을 선택 : ");
	scanf("%d",&select);
	fflush(stdin);

	printf("키 값을 입력 : ");
	gets(key);

	str_size = strlen(str);
	key_size = strlen(key);

	for (i = 0; i < str_size; i++){
		j = i % key_size;		//모듈러 연산을 통한 키값 순환

		if (select == 1){		//암호화 부분
			if ((str[i] >= 'a') && (str[i] <= 'z')){
				str[i] -= 'a';
				key[j] -= 'a';

				if ((str[i] + key[j]) < 0){			
					str[i] += 26;
				}

				str[i] = (str[i] + key[j]) % 26;	//비즈네르 표 적용
				str[i] += 'a';
				key[j] += 'a';
			}
		}

		if (select == 2){		//복호화 부분
			if ((str[i] >= 'a') && (str[i] <= 'z')){
				str[i] -= 'a';
				key[j] -= 'a';

				if ((str[i] - key[j]) < 0){			
					str[i] += 26;
				}

				str[i] = (str[i] - key[j]) % 26;	//비즈네르 표 적용
				str[i] += 'a';
				key[j] += 'a';
			}
		}
	}

	printf("\n암호화, 복호화된 결과 출력 :");
	puts(str);

	return 0;
}

 

 

vigenere.zip

 

'암호학' 카테고리의 다른 글

비즈네르 암호 (Vigenere Cipher)  (0) 2014.06.28
시저암호 소스  (0) 2014.06.27
시저 암호 (Caesar Cipher)  (0) 2014.06.27