文件的加密解密

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/auccy/article/details/95054741

项目需要对一些配置文件进行加密处理,自己实现了简单的demo,原理是对一个字符使用同一个key进行偶数次异或等于自身

代码如下:


#include "stdafx.h"
#include <iostream> 
#include <string>
#include <vector>
#include <direct.h>

std::string getFullpath(const char *fileName)
{
	char buff[1024] = { 0 };
	_getcwd(buff, 1024);
	strcat(buff, "\\");
	strcat(buff, fileName);
	return buff;
}

std::string getFileData(const char *fileName)
{
	std::string str;
	auto fp = fopen(getFullpath(fileName).c_str(), "r");
	if (fp)
	{
		fseek(fp,0,SEEK_END);
		int len = ftell(fp);
		fseek(fp, 0, SEEK_SET);
		if (len>0)
		{
			char *dst = (char *)(malloc(len + 1));
			memset(dst, 0, len + 1);
			fread(dst, 1, len, fp);
			fclose(fp);
			str = dst;
			free(dst);
		}
	}
	return str;
}

int main()
{
	auto str = getFileData("test.txt");
	std::cout << str.c_str() << std::endl;
	const int encodeKeys[] = { 0x0011, 0x0022, 0x0033 };
	//加密key
	int keySize = sizeof(encodeKeys) / sizeof(int);
	for (int i = 0; i < str.size();++i)
	{
		str[i] ^= encodeKeys[i % keySize];
		//异或加密
	}
	std::cout << str.c_str() << std::endl;
	for (int i = 0; i < str.size(); ++i)
	{
		str[i] ^= encodeKeys[i % keySize];
		//再次异或解密
	}
	std::cout << str.c_str() << std::endl;
	getchar();
	return 0;
}

输出如下:

第一行是文件中读取的源字符串

第二行是加密后的字符串

第三行是解密后的字符串

简单的文件加解密就实现了..... 

猜你喜欢

转载自blog.csdn.net/auccy/article/details/95054741