我正在通过编写一个程序来练习我的C文件处理知识,该程序通过给定的路径对文件进行加密-解密。问题是我的程序加密了文件,但从来没有解密过。
我将在下面分享我的程序的代码片段,希望有人能找出它的问题所在。
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<stdint.h>
#include<stddef.h>
void flush_n(){
int c = 0;
while((c = getchar())!= '\n' && c!= EOF);
}
int main(void){
char path[281];
puts("Please enter the path of the file you want to encrypt\\decrypt:");
scanf("%280s",path);
FILE*fp = fopen(path,"rb+");
if(fp==NULL){
fprintf(stderr,"Unable to open the file!\n");
Sleep(2000);
return EXIT_FAILURE;
}
fseek(fp,0,SEEK_END);
size_t size = ftell(fp);
rewind(fp);
char*buff = (char*)malloc(size*sizeof(char));
if(buff==NULL){
fprintf(stderr,"Unable to allocate memory!\n");
Sleep(2000);
return EXIT_FAILURE;
}
const uint32_t KEY = 0x4FC5D4B;
for(size_t i = 0;i < size; i++)
buff[i] ^= (char)KEY;
fwrite(buff,size,sizeof(char),fp);
fclose(fp);
free(buff);
flush_n();
MessageBoxA(NULL,"The file has been successfully encrypted\\decrypted!","DONE!",MB_OK|MB_ICONINFORMATION);
puts("Please press any key to close this window...");
getchar();
return EXIT_SUCCESS;
}
1条答案
按热度按时间flvlnr441#
您为文件内容分配内存,并将该内存的内容与
KEY
(的一小部分)进行异或,然后将缓冲区的内容写入文件,覆盖其以前的内容。***但是***你实际上没有从文件中读取任何东西。您只是对未初始化的缓冲区的内容进行加密,因此输出将只是随机字节。
在
malloc
和加密循环之间,您需要调用fread
来实际将数据从文件读入缓冲区。