栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c/c++简单文件加密

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c/c++简单文件加密

适用场景:不让其他人打开自己不想被看到的内容

原理:使用内存文件映射技术对文件的字节进行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);
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/443928.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号