用C语言设计一个文件加密与解密程序

实现对文本文件的加密,解密操作。并写出n-s流程图

  c语言文件加密和解密方法如下:

  1、首先打开VC++6.0;

  

  2、选择文件,新建;

  

  3、选择C++ source file 新建一个空白文档;

  4、声明头文件

  #include<stdio.h>

  #include<stdlib.h>

  #include<string.h>


  首先写个加密函数,算法就是简介里说的;

  void EncryptFile(FILE *sfp,FILE *dfp,char pwd)
  {
  char ch;
  if(sfp==0||dfp==0)
  {
  printf("ERROR!\n");
  return;
  }
  while((ch=fgetc(sfp))!=EOF)
  {
  if((ch>='a')&&(ch<='z'))
  {
  ch=(ch-'a'+1)%26+'a';
  ch=ch^pwd;
  }
  if((ch>='A')&&(ch<='Z'))
  {
  ch=(ch-'A'+1)%26+'A';
  ch=ch^pwd;
  }
  fputc(ch,dfp);
  }
  }

  写解密子函数:与加密的过程相反;

  void DecryptFile(FILE *sfp,FILE *dfp,char pwd)
  {
  char ch;
  while((ch=fgetc(sfp))!=EOF)
  {
  if((ch>='a')&&(ch<='z'))
  {
  ch=ch^pwd;
  ch=(ch-'a'+25)%26+'a';
  }
  if((ch>='A')&&(ch<='Z'))
  {
  ch=ch^pwd;
  ch=(ch-'A'+25)%26+'A';
  }
  fputc(ch,dfp);
  }
  }

  输出函数,输出文件内容
  void OutputFile(FILE *fp)
  {
  char ch;
  while((ch=fgetc(fp))!=EOF)
  putchar(ch);
  }
   主函数,主要调用这几个函数
  int main()
  {
  /*用户输入的要加密的文件名*/
  char sfilename[20];
  /*用户输入加密后保存的文件名*/
  char dfilename[20];
  /*用来保存密码字符*/
  char pwd;
  FILE *sfp,*dfp;

  printf("\nPlease input filename to be encrypted:\n");
  /*得到要加密的文件名*/
  gets(sfilename);
  /*得到加密后你要的文件名*/
  printf("input filename to save the encrypted file:\n");
  gets(dfilename);
  /*得到加密字符*/
  printf("Please input your Password:\n");
  //scanf("%c",&pwd);
  pwd=getch();
  /*屏幕以*来表示输入的加密字符*/
  printf("*\n");
  /*以只读方式打开要加密的文件*/
  if((sfp=fopen(sfilename,"r"))==0)
  {
  printf("Can't open the file :%s\n",sfilename);
  exit(0);
  }
  /*输出要加密的文件*/
  printf("\nThe the text of file to be encrypted is:\n");
  OutputFile(sfp);
  /*建立加密后的文件*/
  if((dfp=fopen(dfilename,"w+"))==0)
  {
  printf("Can't open or create the file :%s\n",dfilename);
  //exit(0);
  }
  /*文件加密*/
  fseek(sfp,0L,SEEK_SET);
  EncryptFile(sfp,dfp,pwd);
  printf("\n\nEncrypted the file successfully!\n");
  /*输出加密后的文件*/
  printf("\nAfter encrypting the text of file is:\n");
  fseek(dfp,0L,SEEK_SET);
  OutputFile(dfp);
  fclose(sfp);
  fclose(dfp);
  getch();
  return 0;
  }

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-01-11
#include<stdio.h>
#include<string.h>
#include<stdlib.h>main()
{
void sc(char *fp,char *key,int Flen,int Klen);
FILE *fp;
char *pBuf,filename[20],key[20],ch; printf("请输入选择:A、加密 B、解密 C退出\n");
ch=getchar();
while(ch!='c'&&ch!='C')
{
if(ch=='a'||ch=='A'||ch=='b'||ch=='B')
{
printf("请输入要打开的文件名:\n");
scanf("%s",filename);
if((fp=fopen(filename,"rb"))==NULL)
{printf("无法打开文件,请注意输入后缀!\n");<br> exit(0);<br> }

fseek(fp,0,SEEK_END);
int len=ftell(fp);
pBuf=new char[len+1];
rewind(fp);
fread(pBuf,1,len,fp);
pBuf[len]=0;
printf("%s\n",pBuf);
fclose(fp); printf("请输入加密/解密的密码:\n");
scanf("%s",key);
sc(pBuf,key,len,strlen(key));

printf("请输入保存加密文件的文件名:\n");
scanf("%s",filename);
if((fp=fopen(filename,"wb"))==NULL)
{printf("无法保存文件,请注意磁盘是否已满!\n");<br> exit(0);<br> }
else
fwrite(pBuf,1,len,fp);
fclose(fp);
printf("请输入选择:A、加密 B、解密 C退出\n");
}
else {
printf("输入错误,请重新输入\n");
}
ch=getchar();
ch=getchar();
}
}
void sc(char *fp,char *key,int Flen,int Klen)
{int i,j,k;<br>for(i=0;i<Flen;i+=Klen)<br>for(j=i,k=0;k<Klen;j++,k++)<br>fp[j]^=key[k];</p><p>fp[i]='\0';<br>printf("%s\n",fp);<br>}本回答被网友采纳
相似回答