使用异或运算对数据及文件进行加密处理,附软件及源码
前几天写了一篇文章是在C语言中使用异或运算交换两个任意类型变量,其基础为使用^交换两个整数的算法:
a ^= b;
b ^= a;
a ^= b;
如果你看明白这个算法,就会发现这样的规律:一个数异或另一个数两次后,该数保持不变。即:
c = a^b;
c = c^b;
c == a;
这一规律就是使用异或运算对数据及文件进行加密处理的基本原理。
那就先贴下加密算法的代码:
bool XorEncrypt(void* bufPtr, unsigned int bufSize, const char* key, unsigned int keySize)
{
if (!bufPtr || !key || keySize == 0)
{
return false;
}
char* ptr = (char*)bufPtr;
unsigned int index;
for (unsigned int i = 0; i < bufSize; i++)
{
index = i%keySize;
ptr[i] ^= key[index];
}
return true;
}
代码中
bufPtr为需要加密的数据指针
bufSize为需要加密的数据长度
key为密钥数据指针
keySize为密钥数据长度
再附上测试代码:
void main()
{
const char* szKey = "Garbageman is grabage";
unsigned int keySize = strlen(szKey);
int test_int[10] =
{0, 0xff356992, 323, 23582, 0x90abcd,
332335, 69895, 456812, 548, 7646};
float test_float[10] =
{0.0f, 1.000001f, 953214.12f, 3658.01f, 5245.045f,
1.000001f, 953214.12f, 3658.0f, 9545.0f, 65323.0f};
double test_double[10] =
{0.0, 1.000001, 953214.12, 3658.01, 5245.045,
1.000001, 953214.12, 3658.0, 9545.0, 65323.0};
// 加密
XorEncrypt(test_int, sizeof(test_int), szKey, keySize);
XorEncrypt(test_float, sizeof(test_float), szKey, keySize);
XorEncrypt(test_double, sizeof(test_double), szKey, keySize);
// 解密
XorEncrypt(test_int, sizeof(test_int), szKey, keySize);
XorEncrypt(test_float, sizeof(test_float), szKey, keySize);
XorEncrypt(test_double, sizeof(test_double), szKey, keySize);
int m = 0;
}
当数据被两次执行XorEncrypt函数后,其数值是不会发生变化的。看一下调试时的截图:
(1)未执行XorEncrypt的数值,即未加密的数据:
(2)第一次执行XorEncrypt后的数值,即加密后的数据:
(3)第二次执行XorEncrypt后的数值,即解密后的数据:
这如同变魔术一样,数据变乱了,又能恢复回来。
该算法同样可以对文件数据进行处理,下图为我写的这个小软件截图:一幅是文件加密前的,一幅是加密处理后的
软件写得很简单,能支持处理的最大文件取决于你的电脑一次最多申请的内存。顺便说一下,异或是一种很弱的加密方法,很容易被破解。
软件及其源码下载:https://files.cnblogs.com/WhyEngine/FileEncrypt.zip
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
2013-10-27 WIDGET和鼠标特效的DEMO
2013-10-27 原创BULLET物理的DEMO