XOR无法解密某些文件

时间:2018-07-14 07:51:35

标签: file encryption c++17

以下代码可对我尝试的任何文件进行加密,但仅可对.txt文件进行解密。当我尝试解密已加密的.mp3,.png,.mp4文件时,它没有这样做。

所以我想知道为什么会这样吗?如果它成功地解密了.txt文件,为什么为什么我尝试过的其他文件格式却没做到呢?因为如果我理解正确的XOR加密,它将返回第二次运行它的原始字符串,因此我应该能够重新打开文件,并且由于数据应该被解密,它应该能正常工作,对吗?

如果我在这里很蠢,请随时抨击我。

#include <filesystem>
#include <cstdio>
#include <Windows.h>


int main() {
const std::filesystem::path& path = "folder\\";

FILE* pFile, *pFile1;

char key = '¤';

//get files in dir
for (const std::filesystem::directory_entry &p : std::filesystem::directory_iterator(path)) {
    std::filesystem::path filename = p.path().filename();
    std::string tmp = path.string() + filename.string();

    fopen_s(&pFile, tmp.c_str(), "rb");

    if (pFile) {
        //for size purposes
        char* buffer = 0;
        long size;
        fseek(pFile, 0L, SEEK_END);
        size = ftell(pFile);
        fseek(pFile, 0L, SEEK_SET);
        //rewind(pFile);

        buffer = new char[size+1];

        //set to zero to remove random chars
        memset(buffer, 0, size+1);

        //get filecontent
        fgets(buffer, size+1, pFile);

        fclose(pFile);

        //XOR-crypt text/data
        for (int i = 0; i < size+1; i++) {
            buffer[i] ^= key;
        }

        //open for writing
        fopen_s(&pFile1, tmp.c_str(), "wb");

        //write back to file
        fputs(buffer, pFile);

        fclose(pFile1);
        delete[] buffer;
    }
}
}

0 个答案:

没有答案