加密代码不会写回文件

时间:2013-12-04 04:57:32

标签: c

我编译代码然后运行它,但它返回“将加密数据写入文件时出错。所以我假设问题出现在fwrite中。

但我无法确定它。

如果你能解释一下非常有用的问题,我需要一些帮助

    #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];
       scanf("%s", filename);
       fp=fopen(filename,"r");

       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;
    }

1 个答案:

答案 0 :(得分:2)

您正在以“r”模式打开文件,这意味着只读。然后你尝试写一些东西。顺便说一句,你没有检查你是否没有错误地打开文件,并且当fwrite / fread失败时不要关闭它。