版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
项目需要对一些配置文件进行加密处理,自己实现了简单的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;
}
输出如下:
第一行是文件中读取的源字符串
第二行是加密后的字符串
第三行是解密后的字符串
简单的文件加解密就实现了.....