c语言文件加密和解密

急!急急!急!!!最好是详解的 谢谢 谢谢 谢谢 谢谢 谢谢 谢谢 谢谢 谢谢 谢谢 谢谢 谢谢 谢谢 谢谢 谢谢 谢谢 谢谢!!!!!!!!!!!

  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个回答  2011-08-29
没时间写代码。
简单的加密大概就是从需要加密的文件中一个个读取字符,然后对该字符进行加密算法(可以进行异或什么的),把处理后的字符存入另外一个人文件。这其中也就涉及到简单的文件操作,不会太难,楼主最好自己写吧
解密也是一个思路,就是反向的读取另外一个文件,把加密的算法倒过来算就行了。追问

我对你景仰之心,犹如滔滔黄河,一发而不可收拾,交个朋友!
顺便说一下,我还是个新手,只学了半学期,你说的好有深度啊,我至今还听不懂,能在详细点么? 谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

追答

主要先看文件操作那个部分,下面那个程序是加密部分的,你弄懂了就知道解密该怎么办。加密算法也可以自己随便写,自己懂就OK了,不懂的函数上百度搜一下
#include
#include
#include

void encrypt(char *f1,char *pwd,char *f2)
{
int i=0;
FILE *fp1,*fp2; //两个文件的句柄,fp1为需要加密的文件,fp2为保存加密后的文件
char ch;
fp1=fopen(f1,"rb"); //以读的方式打开要加密的文件
if(fp1==NULL)
{
printf("open failed!\n");
exit(1);
}
if((fp2=fopen(f2,"wb"))==NULL)//以写的方式打开另外一个文件
{
printf("open failed!\n");
exit(1);
}
ch=fgetc(fp1);//fgetc()就是从文件中读取一个字符
while(!feof(fp1))//判断文件是否读完
{
ch=ch^*(pwd+i);//对读取的一个字符,进行异或
i++;
fputc(ch,fp2);//把处理后的字符写入另外一个文件
ch=fgetc(fp1);//然后再从要加密的文件中读取下一个字符
if(i>9)
{
i=0;
}
}
fclose(fp1);//关闭文件
fclose(fp2);
}

void main()
{
char f1[30];
char f2[30];
char pwd[10];
printf("sourcefile:");
scanf("%s",f1);//输入要加密文件的路径,放C盘就输C://
printf("password:");
scanf("%s",pwd);//密码主要用于字符的加密
printf("destinationfile:");
scanf("%s",f2);//保存加密文件的路径
encrypt(f1,pwd,f2);//调用函数
}

本回答被提问者和网友采纳
第2个回答  2011-08-29
如果你是作业题之类,俺帮不了你

如果你是为应用,有dll函数可参考

原型:
int WINAPI icePub_encryptFile(char *strFilename, char *strOutputFilename, char *strKey)
输入:strFilename 待加密文件名
strOutputFilename 加密后文件名
strKey 密钥串,任意长度
输出:
返回码:

原型:
int WINAPI icePub_decryptFile(char *strFilename, char *strOutputFilename, char *strKey)
输入:strFilename 加密文件名
strOutputFilename 解密后文件名
strKey 密钥串,任意长度
输出:
返回码:

Char key[128];
strcpy(key,"11223344");

typedef int (WINAPI ICEPUB_ENCRYPTFILE)(char *strFilename, char *strOutputFilename, char *strKey);
ICEPUB_ENCRYPTFILE *icePub_encryptFile = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
{
icePub_encryptFile=(ICEPUB_ENCRYPTFILE *)GetProcAddress(hDLLDrv,"icePub_encryptFile");
}
if(icePub_encryptFile)
icePub_encryptFile("e:\\a.jpg","e:\\a.dat",key);
if(hDLLDrv)
FreeLibrary(hDLLDrv);

Char key[128];
strcpy(key,"11223344");

typedef int (WINAPI ICEPUB_DECRYPTFILE)(char *strFilename, char *strOutputFilename, char *strKey);
ICEPUB_DECRYPTFILE *icePub_decryptFile = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
{
icePub_decryptFile=(ICEPUB_DECRYPTFILE *)GetProcAddress(hDLLDrv,"icePub_decryptFile");
}
if(icePub_decryptFile)
icePub_decryptFile("e:\\a.dat","e:\\a.jpg",key);
if(hDLLDrv)
FreeLibrary(hDLLDrv);追问

我们这是课程设计

追答

呕,卖嘎得
冒汗,楼下的大虾来支援...

参考资料:icePubDll.dll百度之

第3个回答  2019-07-06
楼主还在么?你是bupt的么?

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网