📄 jiamiwenjian.cpp
字号:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <malloc.h>
/***
在实现1的基础上,用维吉尼亚密码实现控制台对英文文本文件(注意明文和密文都以文件形式存在)的加解密
1.本程序将所有可能出现的英文和符号定义在ASCII表中的“032--126”中的95个常用字符
3.在实现2的基础上,实现控制台对英文文本文件(注意明文和密文都以文件形式存在)的加解密
形式:cipher 源文件名 目的文件名 密钥 E/D(标示加解密)说明:对于加密来说,源文件名就是明文,对于解密来说,源文件名就是密文
***/
//对文件进行加密
char * encode(char * str, char * k)
{
int i,j,sl;
char key[100];
strcpy(key,k);
sl=strlen(str);
for(i=0,j=0;i<sl;i++,j++)
str[i]=(((str[i]-32)+(key[j]-32))%95)+32;
return str;
}
//对文件进行解密
char* decode(char* str,char * k)
{
char key[100];
int i,j,end;
strcpy(key,k);
for( i=0,j=0,end=0;i<(int)strlen(str);i++,j++)
{
if((end=((str[i]-32)-(key[j]-32)))<0)
end=end+95;
str[i]=(end%95)+32;
}
return str;
}
//读取文件
char* fread(char* filename)
{
char *str ;
FILE *fp1;
int i=0;
if( (fp1=fopen(filename,"r"))==NULL)
{
printf("can not open file\n");
exit(0);
}
str=(char *)malloc(100*sizeof(char));
while(!feof(fp1))
{
str[i]=fgetc(fp1);
printf("%c",str[i]);
i++;
}
str[i-1]='\0';
printf("\n");
fclose(fp1);
return str;
}
//将明文写入文件
void fwriteM(char * str,char *filename)
{
FILE *fp;
int i=0;
fp=fopen(filename,"w");
while(str[i]!='\0')
{
fputc(str[i],fp);
i++;
}
fclose(fp);
}
//将秘闻写入文件
void fwirteC(char * str,char *filename)
{
FILE *fp;
int i=0;
fp=fopen(filename,"w");
while(str[i]!='\0')
{
fputc(str[i],fp);
i++;
}
fclose(fp);
}
//
char* getkey(char * s, char * k)
{
char *key,str[100];
int i,j,l,r,sl,kl;
key=(char *)malloc(100*sizeof(char));
strcpy(key,k);
strcpy(str,s);
sl=strlen(str);
kl=strlen(key);
l=kl;
if(sl!=kl)
for(i=0; i<(sl-kl)/kl; i++)
for(j=0;j<kl;j++)
{
key[l]=key[j];
l++;
}
r=(sl-kl)%kl;
if(r!=0)
for(i=0;i<r;i++)
{
key[l]=key[i];
l++;
}
key[l]='\0';
return key;
}
//
void main(int argc,char *argv[])
{
char str[100],str1[100];
if(strcmp(argv[2],"-e")==0)
{
strcpy( str,fread(argv[5]));
strcpy(str1,getkey(str,argv[4]));
encode(str,str1);
puts(str);
fwirteC(str,argv[6]);
}
else if(strcmp(argv[2],"-d")==0)
{
strcpy( str,fread(argv[5]));
strcpy(str1,getkey(str,argv[4]));
strcpy(str,decode( str,str1));
puts(str);
fwriteM(str,argv[6]);
}
else
{
printf("ERROR!");
exit(0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -