当前位置: 首页 > news >正文

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)来处理敏感数据。

http://www.xdnf.cn/news/880867.html

相关文章:

  • 谷歌披露威胁组织攻击方式:伪造Salesforce数据加载器实施钓鱼攻击
  • 使用 uv 工具快速部署并管理 vLLM 推理环境
  • [10-1]I2C通信协议 江协科技学习笔记(17个知识点)
  • 网站首页菜单两种布局vue+elementui顶部和左侧栏导航
  • 为什么需要自动下载浏览器驱动?
  • Linux(13)——Ext系列⽂件系统
  • Amazing晶焱科技:电子系统产品在多次静电放电测试后的退化案例
  • RKNN3588上部署 RTDETRV2
  • Day45
  • [Git] 分布式版本控制 远程仓库协作
  • C语言输入函数
  • 1、Go语言基础中的基础
  • Django之表格上传
  • Linux服务器如何安装wps?
  • Java中List的forEach用法详解
  • ObjectMapper 在 Spring 统一响应处理中的作用详解
  • 稳定币的深度剖析与展望
  • 探秘实验室铁地板:科技与安全的完美结合
  • Bug问题
  • Axure零基础跟我学:展开与收回
  • 【Axure高保真原型】图片列表添加和删除图片
  • 企业配电系统安全升级,从局放监测开始
  • vue-18(使用 Vuex 插件实现高级功能)
  • Transformer实战——词嵌入技术详解
  • OpenAI技术路线急转:从TypeScript到Rust的Codex CLI重构内幕
  • 深度学习学习率优化方法——pytorch中各类warm up策略
  • 毕业季AI特训营:AI从入门到实践的2天冲刺计划
  • 软件工程:如何做好软件产品
  • Python使用总结之Mac安装docker并配置wechaty
  • DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_天气预报日历示例(CalendarView01_18)