使用原生C的XOR密码

gwo2fgha  于 2023-06-21  发布在  其他
关注(0)|答案(1)|浏览(121)

我正在通过编写一个程序来练习我的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;
}
flvlnr44

flvlnr441#

您为文件内容分配内存,并将该内存的内容与KEY(的一小部分)进行异或,然后将缓冲区的内容写入文件,覆盖其以前的内容。***但是***你实际上没有从文件中读取任何东西。
您只是对未初始化的缓冲区的内容进行加密,因此输出将只是随机字节。
malloc和加密循环之间,您需要调用fread来实际将数据从文件读入缓冲区。

相关问题