⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jiamiwenjian.cpp

📁 1.本程序将所有可能出现的英文和符号定义在ASCII表中的“000--255”中的256个常用字符 2.在实现2的基础上
💻 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 + -