언어/c언어

c언어 시저 코드

파아랑새 2017. 7. 4. 11:04

# include <string.h>

# include <stdlib.h>

# include <time.h>

# define LEN 300

typedef struct _cea

{

char plainText[LEN];

char cipherText[LEN];

char decryptText[LEN];

int secretKey;

char Field[LEN];

}_cea;


void _init_(_cea* nParam)

{

strcpy(nParam->cipherText, "\0");

strcpy(nParam->plainText, "\0");

strcpy(nParam->decryptText, "\0");

nParam->secretKey = 0;

strcpy(nParam->Field, "\0");

}


void _Field_(_cea* nParam)

{

int i;

// a, b, c, d, e, f, g, ..., z

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

{

nParam->Field[i] = (char)((int)'a' + i);

}

// A, B, C, D, E, F, G, ..., Z

for (i = 26; i < 52; i++)

{

nParam->Field[i] = (char)((int)'A' + i-26);

}

printf("==================================================================================\n");

for (i = 0; i < 52; i++)

{

printf("%c ", nParam->Field[i]);

}

printf("\n"); // 개행

printf("==================================================================================\n");

} // 


void _KeySetting_(_cea* nParam)

{

srand((unsigned)time(NULL));

nParam->secretKey = rand()%strlen(nParam->Field);

printf("secretKey is %d \n", nParam->secretKey);

} // _


void _WritePlainText_(_cea* nParam)

{

printf("plainText input : ");

gets(nParam->plainText);

} // 


void _EncryptPlainText_(_cea* nParam)

{

unsigned int i, j; // index

int result;

int Indx;

for (i = 0; i < strlen(nParam->plainText); i++)

{

result = 0;

for (j = 0; j < strlen(nParam->Field); j++)

{

if (nParam->plainText[i] == nParam->Field[j]) 

{

result = 1;

break;

}

}

if (result == 1)

{

Indx = (j + nParam->secretKey)%strlen(nParam->Field); // encrypt algorithm

printf("Indx => %d\n", Indx);

nParam->cipherText[i] = nParam->Field[Indx];

}

else // result != 1

{

nParam->cipherText[i] = nParam->plainText[i];

}

}

printf("cipherText is %s \n", nParam->cipherText);

}


void _DecryptText_(_cea* nParam)

{

int i, j; // index

int result;

int Indx;

int mov_;

for (i = 0; i < strlen(nParam->cipherText); i++)

{

result = 0;

for (j = 0; j < strlen(nParam->Field); j++)

{

if (nParam->cipherText[i] == nParam->Field[j]) 

{

result = 1;

break;

}

}

if (result == 1)

{

Indx = (j - nParam->secretKey); // decrypt algorithm

if (Indx < 0) 

{

mov_ = Indx + strlen(nParam->Field);

mov_ = mov_%strlen(nParam->Field);

nParam->decryptText[i] = nParam->Field[mov_];

}

else // Indx >= 0

{

Indx = Indx%strlen(nParam->Field);

nParam->decryptText[i] = nParam->Field[Indx];

}

}

else // result != 1

{

nParam->decryptText[i] = nParam->cipherText[i];

}

}

nParam->decryptText[i] = '\0';

printf("decryptText is %s \n", nParam->decryptText);

}

void main(void)

{

_cea c;

_init_(&c);

_Field_(&c);

_KeySetting_(&c);

_WritePlainText_(&c);

_EncryptPlainText_(&c);

_DecryptText_(&c);

}