c++ 通过XOR自己实现一个对称分组加密算法
自己编写基于XOR(异或)操作的对称加密和解密的算法实现方法
#include<iostream>
#include<cstring>
using namespace std;#define XOR_BLOCK 8void PrintHex(const unsigned char* data, int size) {for (int i = 0; i < size; ++i) {printf("%02x", data[i]);}printf("\n");
}int XorCipher(const unsigned char* data, int data_size,unsigned char *out,const unsigned char *pass,int pass_size)
{static const char iv[] = "abcdefgh";unsigned long long p = *(unsigned long long*)iv; // 初始化秘钥// 处理秘钥并与初始化向量异或for (int i = 0; i < pass_size; i += XOR_BLOCK){unsigned long long tmp = 0;int size = XOR_BLOCK;if (pass_size - i < XOR_BLOCK){size = pass_size - i;}memcpy(&tmp, (pass + i), size);p = (p ^ tmp); // 更新p}// 数据源转换成8字节数据类型auto d = (unsigned long long*)data;// 输出数据auto o = (unsigned long long*) out;// 数据分组处理int i = 0;for (; i < data_size / XOR_BLOCK; i++){o[i] = (d[i] ^ p); // XOR异或运算}// 处理补充数据(不足8字节时)int mod = data_size % XOR_BLOCK;if (mod != 0){unsigned long long tmp = 0;memcpy(&tmp, (d + i), mod);o[i] = (tmp ^ p);}return data_size; // 返回加解密后的数据大小
}int main(int argc, char* argv[])
{unsigned char data[] = "测试加解密数据TEST123测试秘钥";unsigned char out[1024] = { 0 };unsigned char out2[1024] = { 0 };unsigned char pass[] = "12345678";int pass_size = strlen((char*)pass);int len = XorCipher(data, sizeof(data) - 1, out, pass, pass_size); // 加密cout << "Encrypted size: " << len << " | Encrypted data: ";PrintHex(out, len);len = XorCipher(out, len, out2, pass, pass_size); // 解密cout << "Decrypted size: " << len << " | Decrypted data: ";PrintHex(out2, len);return 0;
}
注意,这个示例代码只是简单的异或加解密,而实际生产环境中需要更加安全的算法(如AES)来处理敏感数据。