【发布时间】:2020-05-12 22:08:33
【问题描述】:
我正在使用 C++ 学习密码学,所以我开始使用非常简单的 XOR,我想打开文件 0x1.txt 并使用 3 个密钥的 XOR 对其进行加密,然后创建一个名为 0x2.txt 的新文件并将加密的数据放入其中,解密后将其内容放入0x3.txt:
encrpyt -> 0x1.txt -->将加密数据放入0x2.txt;解密 0x2.txt --> 将解密后的数据放入0x3.txt
这是我的代码:
加密代码:
LPVOID Crypt(HANDLE hFile, DWORD dwFileSize) {
// allocate buffer for file contents
LPVOID lpFileBytes = malloc(dwFileSize);
// read the file into the buffer
ReadFile(hFile, lpFileBytes, dwFileSize, NULL, NULL);
// apply XOR encryption
int i;
char key[3] = {'*', '~', '#'};
for (i = 0; i < dwFileSize; i++) {
*((LPBYTE)lpFileBytes + i) ^= key[i % sizeof(key)];
}
return lpFileBytes;
}
调用函数加密文件:
HANDLE hFile = CreateFile("0x1.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
// get file size
DWORD dwFileSize = GetFileSize(hFile, NULL);
CloseHandle(hFile);
// crypt and get crypted bytes
LPVOID lpFileBytes = Crypt(hFile, dwFileSize);
然后将加密后的数据放入 0x2.txt 中:
HANDLE hCryptedFile = CreateFile("0x2.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
// write to crypted file
WriteFile(hCryptedFile, lpFileBytes, dwFileSize, NULL, NULL);
现在我想解密我制作的 0x2.txt 文件的内容:
HANDLE hFile = CreateFile("0x2.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
// get file size
DWORD dwFileSize = GetFileSize(hFile, NULL);
// decrypt and obtain decrypted bytes
LPVOID lpFileBytes = Crypt(hFile, dwFileSize);
CloseHandle(hFile);
创建文件0x3.txt:
HANDLE hTempFile = CreateFile("0x3.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
// write to temporary file
WriteFile(hTempFile, lpFileBytes, dwFileSize, NULL, NULL);
// clean up
CloseHandle(hTempFile);
free(lpFileBytes);
但是文件,它加密更多,而不是解密!。那么它的问题是什么? 这是我的完整代码:
https://pastebin.com/6WZX5J1K
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
标签: c++ encryption xor