需要加密一个文件,我把它全写,但读取文件时出错

时间:2013-12-04 01:45:48

标签: c encryption error-handling

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int encrypt_data(FILE *);

int main(void)
{
   FILE *fp;
   int return_code;

   printf("Please enter the file to be encrypted: ");
   char filename[200];
   fgets(filename, 200, stdin);
   fp=fopen("filename","w+");

   return_code = encrypt_data(fp);

   return 0;
}
int encrypt_data(FILE *disk_fp)
{
  int i;
  unsigned long int file_size;
  int key_length;
  char *file_buff = NULL;

  char key[] = "12`3-vk0fn";

  key_length = strlen(key);

  fseek(disk_fp, 0, SEEK_END);
  file_size = ftell(disk_fp);

  rewind(disk_fp);

  file_buff = malloc(file_size);

  if( fread(file_buff, file_size, 1, disk_fp) != 1)
  {
   printf("Error in reading file\n");
   return -1;
  }

  for( i=0; i<file_size; i++)
  {
   file_buff[i] = file_buff[i] ^ key[i%key_length];
  }

  rewind(disk_fp);

  if( fwrite(file_buff, file_size, 1, disk_fp) != 1)
  {
   printf("Error in writing encrypted data to file\n");
   return -1;
  }
  free(file_buff);
  fclose(disk_fp);

return 0;
}

我试图加密的文件是“encrypt.txt”它只是一个无意义的句子但是当我编译这段代码然后./a.out它要求我输入文件名时我输入encrypt.txt我想它可能只是想要名称,但无论哪种方式它都会返回“读取文件时出错”。

我认为我的fgets()fopen()是罪魁祸首,但我对如何修复它非常迷失。

如果您可以在代码中找到错误,然后解释为什么它会弄乱,那将来会对我有所帮助。非常感谢。

2 个答案:

答案 0 :(得分:0)

删除filename变量的双引号。并把它作为

fp=fopen(filename,"w+");

答案 1 :(得分:0)

也许我错了,但仔细检查我认为你最好使用

scanf("%s", filename);

而不是fgets()函数。你正在读取用户的文字而不是文件。