密码学(一):sm4+ofb
SM4 算法SM4是中国国家密码管理局发布的对称加密标准原名 SMS4主要用于无线局域网标准WAPI及各类政务、金融应用。它在结构上属于分组密码算法。1. 核心规格分组长度128 位16 字节。密钥长度128 位16 字节。轮数共 32 轮变换。设计结构非平衡 Feistel 结构实际上更接近于一种特殊的迭代结构其解密算法与加密算法结构相同仅轮密钥顺序相反。2. 算法逻辑SM4 的核心逻辑在于其非线性变换部分。S 盒S-boxSM4 的 S 盒是基于有限域映射的能够抵抗差分攻击和线性攻击。线性变换L用于扩散确保每一位的变化都能迅速影响到整个分组。轮密钥生成通过系统参数和固定参数将 128 位初始密钥扩展出 32 个轮密钥。OFB 模式将分组密码变为流密码OFB (Output Feedback, 输出反馈模式)是对称加密的一种工作模式。它的最大特点是将 SM4 这种“块加密”引擎当作“伪随机数生成器”来使用。1. 工作原理在 OFB 模式下SM4 不直接加密明文而是加密上一次加密输出的反馈向量初始化选取一个初始化向量IV。生成密钥流用 SM4 加密 IV得到第一个密钥块。反馈将这个密钥块再输入 SM4 加密得到第二个密钥块以此类推。加密明文将生成的密钥流与明文进行异或 (XOR)运算。2. 核心公式若以 Ek 表示使用密钥 k 的 SM4 加密函数Pi 为明文块Ci 为密文块Oi 为输出块SM4-OFB 的技术优势无填充要求由于明文是直接与密钥流异或明文长度不需要是 16 字节的整数倍。这在处理流媒体或字节流数据时非常方便。错误不蔓延如果密文在传输中某一位损坏只会影响对应的那一位明文不会像 CBC 模式那样导致整个后续解密失败。预计算能力因为密钥流的生成完全不依赖明文系统可以提前算出大量的密钥流块等到明文一到直接进行异或运算极大地降低了加密延迟。解密与加密对称解密时依然是使用 SM4 的加密流程来生成密钥流然后再异或。这意味着硬件实现时只需要加密电路。安全注意事项尽管 SM4-OFB 非常高效但在实际工程中必须遵守以下准则1. IV 的唯一性绝对禁止重用这是 OFB 模式的致命伤。如果使用相同的密钥和相同的 IV 加密两段不同的明文则攻击者可以通过异或结果推导出明文内容。IV 必须是不可预测且唯一的。2. 认证缺失OFB 模式本身不提供完整性保护。攻击者虽然不知道明文但可以通过翻转密文中的特定位Bit-flipping attack来精确修改解密后的明文。在安全要求高的场景建议配合HMAC使用。示例c#include iostream #include vector #include cstring #include gmssl/sm4.h /** * SM4-OFB 加解密实现函数 * param key 16字节密钥 * param iv 16字节初始化向量 (每个消息必须唯一) * param input 输入数据指针 * param input_len 输入数据长度 * param output 输出缓冲区指针 (长度应等于 input_len) */ void sm4_ofb_transform(const uint8_t key[16], const uint8_t iv[16], const uint8_t* input, size_t input_len, uint8_t* output) { SM4_KEY sm4_key; uint8_t iv_buffer[16]; uint8_t block_out[16]; int offset 0; // 1. 初始化 SM4 密钥 sm4_set_encrypt_key(sm4_key, key); // 2. 拷贝 IV因为 OFB 需要不断更新反馈向量 memcpy(iv_buffer, iv, 16); // 3. 逐块处理 for (size_t i 0; i input_len; i) { // 当处理到块的边界或起始时生成新的密钥流块 if (offset 0) { sm4_encrypt(sm4_key, iv_buffer, block_out); // 将加密后的输出作为下一次加密的输入 (Feedback) memcpy(iv_buffer, block_out, 16); } // 4. 将密钥流与明文/密文异或 output[i] input[i] ^ block_out[offset]; // 更新块内偏移SM4 块大小为 16 字节 offset (offset 1) % 16; } } // 使用示例 int main() { uint8_t key[16] {0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10}; uint8_t iv[16] {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}; const char* text Hello, SM4-OFB Security!; size_t len strlen(text); std::vectoruint8_t encrypted(len); std::vectoruint8_t decrypted(len); // 加密 sm4_ofb_transform(key, iv, (uint8_t*)text, len, encrypted.data()); // 解密 (OFB 模式解密函数与加密完全一致IV 需相同) sm4_ofb_transform(key, iv, encrypted.data(), len, decrypted.data()); std::cout Original: text std::endl; std::cout Decrypted: std::string(decrypted.begin(), decrypted.end()) std::endl; return 0; }总结特性SM4-ECB (基本模式)SM4-CBC (链式模式)SM4-OFB (反馈模式)安全性低易受模式分析高高IV 唯一时填充需要需要不需要并行计算支持不支持解密外支持预计算错误影响仅本块蔓延至下一块无蔓延

相关新闻

基于Matlab的CNN竞争神经网络的聚类分析附Matlab代码

基于Matlab的CNN竞争神经网络的聚类分析附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书…

2026/7/3 1:21:19 阅读更多 →
SSM入学新生信息管理系统y0mew程序+源码+数据库+调试部署+开发环境

SSM入学新生信息管理系统y0mew程序+源码+数据库+调试部署+开发环境

本系统(程序源码数据库调试部署开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。 系统程序文件列表 开题报告内容 一、项目背景与意义 随着高校招生规模的不断扩大,新生信息管理工作变得日益复杂和繁琐…

2026/5/17 3:29:34 阅读更多 →
3483. 2的幂次方(上海交通大学考研机试题)

3483. 2的幂次方(上海交通大学考研机试题)

3483. 2的幂次方 ⭐️难度&#xff1a;中等 ⭐️类型&#xff1a;分治 &#x1f4d6;题目&#xff1a;题目链接 &#x1f4da;题解&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string> #include <vector> using namesp…

2026/5/17 3:29:34 阅读更多 →

最新新闻

从零部署Hermes Agent:构建自我进化的AI智能体实战指南

从零部署Hermes Agent:构建自我进化的AI智能体实战指南

在 AI 智能体领域&#xff0c;从简单的聊天机器人到能够自主执行复杂任务的智能助手&#xff0c;中间隔着一道巨大的鸿沟。这道鸿沟的核心在于&#xff0c;一个真正的智能体不仅需要理解指令&#xff0c;更需要具备学习、记忆、规划和利用工具的能力。Hermes Agent 正是 Nous R…

2026/7/5 12:21:48 阅读更多 →
AI建站工具指南:零代码打造专业网站的完整流程

AI建站工具指南:零代码打造专业网站的完整流程

1. AI建站工具的本质与核心价值AI建站工具正在彻底改变个人和小型企业创建网站的方式。这类工具的核心价值在于将原本需要专业开发技能的建站过程&#xff0c;简化为一个自然语言交互的对话流程。想象一下&#xff0c;你只需要告诉AI"我想要一个展示摄影作品集的网站&…

2026/7/5 12:21:48 阅读更多 →
如何用开源工具Meshroom从照片创建专业3D模型:完整免费指南

如何用开源工具Meshroom从照片创建专业3D模型:完整免费指南

如何用开源工具Meshroom从照片创建专业3D模型&#xff1a;完整免费指南 【免费下载链接】Meshroom Node-based Visual Programming Toolbox 项目地址: https://gitcode.com/gh_mirrors/me/Meshroom 在当今数字时代&#xff0c;将普通照片转化为精美3D模型不再是专业工作…

2026/7/5 12:19:47 阅读更多 →
PPO算法实战:从原理到调试技巧

PPO算法实战:从原理到调试技巧

1. 项目概述&#xff1a;PPO算法初体验 第一次接触强化学习中的PPO&#xff08;Proximal Policy Optimization&#xff09;算法时&#xff0c;那种既兴奋又忐忑的心情至今记忆犹新。作为目前最主流的策略梯度算法之一&#xff0c;PPO以其出色的稳定性和样本效率&#xff0c;成为…

2026/7/5 12:17:47 阅读更多 →
BetterGenshinImpact:三阶段智能辅助指南,从萌新到高玩的完整解决方案

BetterGenshinImpact:三阶段智能辅助指南,从萌新到高玩的完整解决方案

BetterGenshinImpact&#xff1a;三阶段智能辅助指南&#xff0c;从萌新到高玩的完整解决方案 【免费下载链接】better-genshin-impact &#x1f4e6;BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄…

2026/7/5 12:15:46 阅读更多 →
PMP 项目管理规划(Planning)学习专题指南

PMP 项目管理规划(Planning)学习专题指南

PMP 项目管理规划&#xff08;Planning&#xff09;学习专题指南 在PMP考试&#xff08;尤其是2026新版&#xff09;中&#xff0c;Planning&#xff08;规划&#xff09; 是Process领域&#xff08;41%权重&#xff09;的核心部分&#xff0c;也是零基础考生最需要重点掌握的模…

2026/7/5 12:13:45 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools&#xff1a;5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里&#xff0c;参与了关于混合后量子密码学的讨论&#xff0c;应付端点攻击找茬的人&#xff0c;还参与留言板讨论后&#xff0c;发现“威胁模型”对多数人仍是陌生概念&#xff0c;且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”&#xff1a;我理解的渗透测试到底是什么&#xff1f;每次看到新闻里说某个大公司的数据被“黑”了&#xff0c;或者某个网站被攻击导致服务瘫痪&#xff0c;你是不是和我一样&#xff0c;心里会冒出两个念头&#xff1a;一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools&#xff1a;5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里&#xff0c;参与了关于混合后量子密码学的讨论&#xff0c;应付端点攻击找茬的人&#xff0c;还参与留言板讨论后&#xff0c;发现“威胁模型”对多数人仍是陌生概念&#xff0c;且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”&#xff1a;我理解的渗透测试到底是什么&#xff1f;每次看到新闻里说某个大公司的数据被“黑”了&#xff0c;或者某个网站被攻击导致服务瘫痪&#xff0c;你是不是和我一样&#xff0c;心里会冒出两个念头&#xff1a;一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻