언어/c언어

c언어 암호화 코드 시저

파아랑새 2017. 10. 23. 16:57

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <stdbool.h>

#define L 1024

#define MOD %

typedef struct _Cea

{

char plainText[1024];

char cipherText[1024];

char decryptText[1024];

char alphabetString[26];

} cea, *ptrCea;

// +++++++++++++++++++++++++++++++++++++++++++++++++++++

void _Init_(cea** param);

void _WritePlainTextString_(cea** param);

void _EncryptMov3_(cea** param);

void _DecryptMov3_(cea** param);

// +++++++++++++++++++++++++++++++++++++++++++++++++++++

int main(void) {

ptrCea pNode = (ptrCea)malloc(sizeof(cea));

_Init_(&pNode);

_WritePlainTextString_(&pNode);

_EncryptMov3_(&pNode);

_DecryptMov3_(&pNode);

free(pNode);

return 0;

} // end of main function 

// +++++++++++++++++++++++++++++++++++++++++++++++++++++

void _Init_(cea** param)

{

if ((*param) == NULL)

{

fprintf(stderr, "malloc error ... !!!");

exit(1);

}

else

{ // (*param) != NULL

// { A, B, C, D, E, F, G, H, I, ..., X, Y, Z }

for (int i = 0; i < 26; i++)

{

(*param)->alphabetString[i] = (char)((int)('A') + i);

}


// plainText

strcpy((**param).plainText, "\0");


// cipherText

strcpy((**param).cipherText, "\0");


// decryptText

strcpy((**param).decryptText, "\0");

}

} // end of _Init_ function

void _WritePlainTextString_(cea** param)

{

printf("평문 입력 :  ");

fgets((** param).plainText, L, stdin);

int str_len = 0;

str_len = strlen((** param).plainText);

(** param).plainText[str_len - 1] = '\0';

system("cls");

printf("%s\n", (** param).plainText);

} // end of _WritePlainTextString_ function 

void _EncryptMov3_(cea** param)

{

bool TF_value;

int indx = 0;

int i, j;

for (i = 0; i < strlen((** param).plainText); i++)

{

TF_value = false;

for (j = 0; j < strlen((** param).alphabetString); j++)

{

if ((** param).plainText[i] == (** param).alphabetString[j])

{

TF_value = true;

//  << Encrypt >>

indx = (j + 3) MOD(strlen((** param).alphabetString));

break;

}

}

if (TF_value == true)

{

(** param).cipherText[i] = (** param).alphabetString[indx];

}

else

{ // TF_value == false

(** param).cipherText[i] = (** param).plainText[i];

}

}

(** param).cipherText[i] = '\0';

printf("cipherText => %s \n", (** param).cipherText);

} // end of _EncryptMov3_ function 

void _DecryptMov3_(cea** param)

{

bool TF_value;

int indx = 0;

int i, j;

for (i = 0; i < strlen((** param).cipherText); i++)

{

TF_value = false;

for (j = 0; j < strlen((** param).alphabetString); j++)

{

if ((** param).cipherText[i] == (** param).alphabetString[j])

{

TF_value = true;

//  << Encrypt >>

indx = (j - 3) MOD(strlen((** param).alphabetString));

if (indx < 0)

{

indx = indx + strlen((** param).alphabetString);

}

break;

}

}

if (TF_value == true)

{

(** param).decryptText[i] = (** param).alphabetString[indx];

}

else

{ // TF_value == false

(** param).decryptText[i] = (** param).cipherText[i];

}

}

(** param).decryptText[i] = '\0';

printf("decryptText => %s \n", (** param).decryptText);

}