适用场景:不让其他人打开自己不想被看到的内容
原理:使用内存文件映射技术对文件的字节进行0xff与操作,再次操作则还原
使用方式:
加密: FileXor.exe 待加密文件路径(绝对/相对都可以)
解密: FileXor.exe 待加密文件路径(绝对/相对都可以)
效率:
600M文件大概2~3秒。
代码:
// FileXor.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include#include #include using namespace std; typedef DWORD mmf_share_mode; typedef DWORD mmf_access_mode; typedef DWORD mmf_flags; int main(int argc, char* argv[]) { const char* shared_name = "mmf"; const char* file_name = argv[1]; //存取模式 mmf_access_mode access_mode = (GENERIC_READ | GENERIC_WRITE); //共享模式 mmf_share_mode share_mode = FILE_SHARE_READ | FILE_SHARE_WRITE; //文件属性 mmf_flags flags = FILE_FLAG_SEQUENTIAL_SCAN;//|FILE_FLAG_WRITE_THROUGH|FILE_FLAG_NO_BUFFERING; DWORD error_code; //创建文件 HANDLE mmHandle = CreateFile(file_name, access_mode, share_mode, NULL, OPEN_ALWAYS, flags, NULL); if (mmHandle == INVALID_HANDLE_VALUE) { error_code = GetLastError(); cout << "打开文件失败:" << error_code << endl; return 1; } ULARGE_INTEGER ulFileSize; ulFileSize.LowPart = GetCompressedFileSize((file_name),&ulFileSize.HighPart); int nSize = ulFileSize.LowPart; DWORD size_high = 0; //创建文件映射,如果要创建内存页面文件的映射,第一个参数设置为INVALID_HANDLE_VALUE HANDLE mmfm = CreateFileMapping(mmHandle, NULL, PAGE_READWRITE, size_high, nSize, shared_name); error_code = GetLastError(); if (ERROR_SUCCESS != error_code) { cout << "创建内存映射文件失败:" << error_code << endl; return 3; } if (mmfm == NULL) { if (mmHandle != INVALID_HANDLE_VALUE) { CloseHandle(mmHandle); return 4; } } DWORD view_access = FILE_MAP_ALL_ACCESS; //获得映射视图 char* mmfm_base_address = (char*)MapViewOfFile(mmfm, view_access, 0, 0, nSize); if (mmfm_base_address == NULL) { error_code = GetLastError(); if (error_code != ERROR_SUCCESS) { cout << "映射文件失败:" << error_code << endl; return 5; } } char *pTmp = new char[2]; //向内存映射视图中写数据 for (DWORD i = 0; i < nSize; i++) { pTmp[0] = *(mmfm_base_address + i) ^ 0xff; CopyMemory((PVOID)(mmfm_base_address+i), pTmp, 1); } delete pTmp; //卸载映射 UnmapViewOfFile(mmfm_base_address); //关闭内存映射文件 CloseHandle(mmfm); //关闭文件 CloseHandle(mmHandle); }



