📄 traditionalcode.c
字号:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<time.h>
#define KLEN 2048
#define TLEN 2048
void HelpMessage()
{
printf("Traditonal Encrypt Algorithm.\n");
printf("Copyright: copyright (C) 2009 肖庆平.\n");
printf("All Right Reserved!!!");
printf("\n");
printf("\n");
printf("Command List:\n");
printf("[1] -gp <plain filename>: \n");
printf(" generate a plain text.\n");
printf("[2] -sink <key filename>: \n");
printf(" generate a single table key.\n");
printf("[3] -sftk <key filename>: \n");
printf(" generate a shift key.\n");
printf("[4] -vik <key filename>: \n");
printf(" generate a vigenere key.\n");
printf("[5] -sin <plain filename> <key filename> <cipher filename>: \n");
printf(" select the single table algorithm\n");
printf("[6] -sft <plain filename> <key filename> <cipher filename>: \n");
printf(" select the shift algorithm\n");
printf("[7] -vi <plain filename> <key filename> <cipher filename>: \n");
printf(" select the vigenere algorithm\n");
}
void SuccessMessage()
{
printf("\n");
printf("\n");
printf("Traditonal Encrypt Algorithm.\n");
printf("Copyright: copyright (C) 2009 肖庆平.\n");
printf("All Right Reserved!!!");
printf("\n");
printf("\n");
}
void RandomPlain(char * filename)
{
FILE *fp;
int plainsize;
int i;
char plainchar;
fp=fopen(filename,"w");
srand((unsigned)time(NULL));
plainsize=rand()%TLEN+1;
for(i=0; i<plainsize; ++i)
{
plainchar=rand()%26+'a';
fprintf(fp, "%c",plainchar);
}
SuccessMessage();
printf("Success in get the plaintext in %s.\n",filename);
}
void RandomSingleKey(char *filename)
{
FILE *fp;
int keysize;
int i;
char keychar;
fp=fopen(filename,"w");
srand((unsigned)time(NULL));
keysize=rand()%KLEN+1;
for(i=0; i<keysize; ++i)
{
keychar=rand()%26+'a';
fprintf(fp, "%c",keychar);
}
SuccessMessage();
printf("Success in get the key in %s.\n",filename);
}
void RandomShiftKey(char *filename)
{
FILE *fp;
int i;
fp=fopen(filename,"w");
srand((unsigned)time(NULL));
i=rand()%26;
fprintf(fp, "%d",i);
SuccessMessage();
printf("Success in get the key in %s.\n",filename);
}
void RandomVigenereKey(char *filename)
{
FILE *fp;
int keysize;
int i;
char keychar;
fp=fopen(filename,"w");
srand((unsigned)time(NULL));
keysize=rand()%10;
for(i=0; i<keysize; ++i)
{
keychar=rand()%26+'a';
fprintf(fp, "%c",keychar);
}
SuccessMessage();
printf("Success in get the key in %s.\n",filename);
}
void singletable(char *plain,char *key,char *cipher)
{
FILE *fplain,*fpkey,*fpcipher;
char *keystr,*plainstr,*cipherstr;
char *alp="abcdefghijklmnopqrstuvwxyz";
int keylen,textlen;
int i,j,k;
keystr=(char *)malloc(KLEN);
plainstr=(char *)malloc(TLEN);
cipherstr=(char *)malloc(TLEN);
if((fpkey=fopen(key,"r"))==NULL)
{
printf("Cannot open the key file.\n");
exit(0);
}
if((fplain=fopen(plain,"rb"))==NULL)
{
printf("Cannot open the plain file.\n");
exit(0);
}
if((fpcipher=fopen(cipher,"wb"))==NULL)
{
printf("Cannot open the cipher file.\n");
exit(0);
}
fgets(keystr,KLEN-1,fpkey);
fputs("<html>\n",fpcipher);
fputs("<head>\n",fpcipher);
fputs("<title>您选择的算法是单表代换密码算法</title>\n",fpcipher);
fputs("</head>\n",fpcipher);
fputs("\n",fpcipher);
fputs("</body>\n",fpcipher);
fputs("<caption><h2 align=center>单表加密结果</h2></caption>\n",fpcipher);
fputs("<font size=5>您输入的密钥为:</font><br>",fpcipher);
fprintf(fpcipher,keystr);
fputs("\n<br>",fpcipher);
keystr=strcat(keystr,alp);
keylen=strlen(keystr);
for(i=0;i<keylen;i++) //密钥转换
{
for(j=i+1;j<keylen;j++)
{
if(keystr[j]==' '||keystr[j]==keystr[i])
{
for(k=j;k<keylen;k++)
{
keystr[k]=keystr[k+1];
}
j--;
keylen--;
}
}
}
fputs("<font size=5>密钥转换表:</font><br>",fpcipher);
fputs("\n",fpcipher);
fprintf(fpcipher,alp);
fputs("\n<br>",fpcipher);
fprintf(fpcipher,keystr);
fputs("\n",fpcipher);
//printf("%d",keylen);
//puts(keystr);
fputs("<div align=center>\n",fpcipher);
fputs("<br><br>\n",fpcipher);
fputs("<table border=2 width=70% height=50%>\n",fpcipher);
fputs("<caption><h2 align=center>明文密文对照表</h2></caption>\n",fpcipher);
fgets(plainstr,TLEN+1,fplain);
fputs("<tr>\n<th>明文</th><th>密钥</th><th>密文</th>\n</tr>\n",fpcipher);
textlen=strlen(plainstr);
for(i=0;i<textlen;i++)
{
if(plainstr[i]==' ')
cipherstr[i]=' ';
else for(j=0;j<26;j++)
{
if(plainstr[i]==alp[j])
{
cipherstr[i]=keystr[j];
}
}
fputs("<tr>\n<th>\n",fpcipher);
fputc(plainstr[i],fpcipher);
fputs("</th>\n<th>\n",fpcipher);
fputc(keystr[i%26],fpcipher);
fputs("</th>\n<th>\n",fpcipher);
fputc(cipherstr[i],fpcipher);
fputs("</th>\n</tr>\n",fpcipher);
}
fputs("</table>\n</div>\n</body>\n</html>\n",fpcipher);
fclose(fplain);
fclose(fpkey);
fclose(fpcipher);
SuccessMessage();
printf("Encrypt Success!!!\n");
}
void shift(char *plain,char *key,char *cipher)
{
FILE *fplain,*fpkey,*fpcipher;
char *plainstr,*cipherstr;
int keystr;
char *circle_alp;
char *alp="abcdefghijklmnopqrstuvwxyz";
int textlen;
int i,j;
circle_alp=(char *)malloc(27);
plainstr=(char *)malloc(TLEN);
cipherstr=(char *)malloc(TLEN);
if((fpkey=fopen(key,"r"))==NULL)
{
printf("Cannot open the key file.\n");
exit(0);
}
if((fplain=fopen(plain,"rb"))==NULL)
{
printf("Cannot open the plain file.\n");
exit(0);
}
if((fpcipher=fopen(cipher,"wb"))==NULL)
{
printf("Cannot open the cipher file.\n");
exit(0);
}
//keystr=getw(fpkey);
fscanf(fpkey,"%d",&keystr);
printf("%d",keystr);
fputs("<html>\n",fpcipher);
fputs("<head>\n",fpcipher);
fputs("<title>您选择的算法是移位密码算法</title>\n",fpcipher);
fputs("</head>\n",fpcipher);
fputs("\n",fpcipher);
fputs("</body>\n",fpcipher);
fputs("<caption><h2 align=center>移位加密结果</h2></caption>\n",fpcipher);
fputs("<font size=5>您输入的密钥为:</font><br>",fpcipher);
fprintf(fpcipher,"%d",keystr);
fputs("\n<br>",fpcipher);
fputs("<font size=5>密钥转换表:</font><br>",fpcipher);
fputs("\n",fpcipher);
fputs(alp,fpcipher);
fputs("\n<br>",fpcipher);
for(i=0;i<26;i++)
{
circle_alp[i]=alp[i]+keystr;
if(circle_alp[i]>122)
{
circle_alp[i]=circle_alp[i]-26;
}
//cout<<circle_alp[i];
fputc(circle_alp[i],fpcipher);
}
fputs("\n",fpcipher);
fgets(plainstr,TLEN-1,fplain);
textlen=strlen(plainstr);
fputs("<div align=center>\n",fpcipher);
fputs("<br><br>\n",fpcipher);
fputs("<table border=2 width=70% height=50%>\n",fpcipher);
fputs("<caption><h2 align=center>明文密文对照表</h2></caption>\n",fpcipher);
fputs("<tr>\n<th>明文</th><th>密文</th>\n</tr>\n",fpcipher);
for(i=0;i<textlen;i++)
{
if(plainstr[i]==' ')
{
cipherstr[i]=' ';
}
else for(j=0;j<26;j++)
{
if(plainstr[i]==alp[j])
cipherstr[i]=circle_alp[j];
}
fputs("<tr>\n<th>\n",fpcipher);
fputc(plainstr[i],fpcipher);
fputs("</th>\n<th>\n",fpcipher);
fputc(cipherstr[i],fpcipher);
fputs("</th>\n</tr>\n",fpcipher);
}
fclose(fplain);
fclose(fpkey);
fclose(fpcipher);
SuccessMessage();
printf("Encrypt Success!!!\n");
}
void vigenere(char *plain,char *key,char *cipher)
{
FILE *fplain,*fpkey,*fpcipher;
char *keystr,*plainstr,*cipherstr;
int keylen,textlen;
int i,j,k;
int Change[10];
int flag=0;
keystr=(char *)malloc(10);
plainstr=(char *)malloc(10);
cipherstr=(char *)malloc(10);
if((fpkey=fopen(key,"r"))==NULL)
{
printf("Cannot open the key file.\n");
exit(0);
}
if((fplain=fopen(plain,"rb"))==NULL)
{
printf("Cannot open the plain file.\n");
exit(0);
}
if((fpcipher=fopen(cipher,"wb"))==NULL)
{
printf("Cannot open the cipher file.\n");
exit(0);
}
fgets(keystr,11,fpkey);
keylen=strlen(keystr);
for(i=0;i<keylen;i++)
{
for(j=i+1;j<keylen;j++)
{
if(keystr[j]==' ')
{
for(k=j;k<keylen;k++)
{
keystr[k]=keystr[k+1];
}
j--;
keylen--;
}
}
}
for(i=0;i<keylen;i++)
{
if(keystr[i]>='A'&&keystr[i]<='Z')
{
Change[i]=(int)(keystr[i]-'A');
}
else if(keystr[i]>='a'&&keystr[i]<='z')
{
Change[i]=(int)(keystr[i]-'a');
}
// printf("%d",Change[i]);
}
fgets(plainstr,11,fplain);
textlen=strlen(plainstr);
k=0;
for(i=0;i<textlen;i++)
{
if(plainstr[i]==' ')
flag++;
//continue;
else
{
cipherstr[k]=(char)(((int)plainstr[i]+Change[k%keylen]-'a')%26+'a');
k++;
}
}
for(i=0;i<textlen-flag;i++)
{
fputc(cipherstr[i],fpcipher);
}
fclose(fplain);
fclose(fpkey);
fclose(fpcipher);
SuccessMessage();
printf("Encrypt Success!!!\n");
}
void main(int argc,char *argv[])
{
if(argc==1)
{
HelpMessage();
}
else
{
if(argc==3 && strcmp(argv[1],"-gp")==0)
{
RandomPlain(argv[2]);
}
else if(argc==3 && strcmp(argv[1],"-sink")==0)
{
RandomSingleKey(argv[2]);
}
else if(argc==3 && strcmp(argv[1],"-sftk")==0)
{
RandomShiftKey(argv[2]);
}
else if(argc==3 && strcmp(argv[1],"-vi")==0)
{
RandomVigenereKey(argv[2]);
}
else if(argc==5 && strcmp(argv[1],"-sin")==0)
{
singletable(argv[2],argv[3],argv[4]);
}
else if(argc==5 && strcmp(argv[1],"-sft")==0)
{
shift(argv[2],argv[3],argv[4]);
}
else if(argc==5 && strcmp(argv[1],"-vi")==0)
{
vigenere(argv[2],argv[3],argv[4]);
}
else
{
printf("Invalid Command!!!");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -