以下代码可对我尝试的任何文件进行加密,但仅可对.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;
}
}
}