c언어 시저 코드
# 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);
}