file - XOR 无法解密某些文件
问题描述
以下代码设法加密我尝试的任何文件,但它只设法解密 .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;
}
}
}
解决方案
推荐阅读
- java - 在 Unirest Java 结果中在 302 http 结果上发布请求
- c# - 在 C# 中使用 XSLT 合并具有不同节点结构的多个 XML 文件
- python - 如果它高于前一个数字,则打印数字,否则不要打印它python
- angular - 在 Angular 5 中测试 @ContentChildren()
- html - 需要 2 个值来解压 for 循环;使用 length_is 得到 3
- angular - spyon() 或 jasmine.createobject 返回可观察数组
- javascript - 如何将文件输入转换为base64 - 反应js
- spring-boot - SpringBoot Rest 的 post 请求和 Get 响应的最大有效负载大小
- scala - 如何模拟scala泛型方法
- app-store - 我可以删除在 iTunesConnect 中被拒绝的应用程序并上传具有不同应用程序名称的相同代码吗?