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

.NET AES 讲透:从 ECB 到 GCM,到底差在哪?

AES全称高级加密标准Advanced Encryption Standard。简单说它是目前全球最主流的对称加密算法同一把钥匙负责加密和解密。HTTPS、手机文件加密、数据库、云存储……现代互联网里大量“数据保密”场景背后基本都有 AES 的身影。2001 年NIST 从全球算法中选中了比利时团队设计的 RijndaelAES 从此取代 DES成为国际标准。二十多年过去它依然是金融、政府、云计算领域最核心的加密方案之一。那它和 JWT 有什么关系JWT 主要解决“你是谁、数据有没有被篡改”AES 主要解决“别人能不能看到内容”。大部分 JWT 默认只是签名JWS并不是加密Payload 通常可以直接 Base64 解码查看。一个偏身份验证一个偏数据保密属于两条不同的技术线。 NIST AES 标准文档https://csrc.nist.gov/projects/cryptographic-standards-and-guidelines .NET 官方 AES 文档https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.aes AES 的内核切块、上锁、选模式AES 是一个块加密算法。它的工作方式很粗暴把明文切成每段 16 字节128 位的小块然后用同一把密钥对每个块进行多次搅乱。根据密钥长度的不同搅乱的轮数也不同128 位密钥 → 10 轮192 位密钥 → 12 轮256 位密钥 → 14 轮实际使用中AES 总要搭配一个“工作模式”。这个模式决定了数据块之间怎么关联也直接决定了你这加密到底安不安全。四种最常见的模式ECB千万别用每个块独立加密相同明文产生相同密文。你用 ECB 给图片加密轮廓还能看得一清二楚。这个模式存在的唯一价值是教科书上当反面教材。CBC老牌选手每个块先和前一个密文块做 XOR 运算再加密需要一个 16 字节的随机 IV。CBC 的问题是只能保证机密性不提供完整性验证——CBC 无法验证数据是否被篡改攻击者修改密文后解密可能得到错误数据也可能触发 Padding 异常但无法可靠判断数据完整性。GCM目前首选会生成认证标签Tag加密的同时生成一个认证标签。解密时如果数据在传输中被篡改过哪怕一个比特标签立刻对不上CryptographicException直接甩你脸上。加密 防篡改一步到位。.NET Core 3 起原生支持。CTR流加密把计数器加密后的结果和明文异或适合实时流数据不需要填充。同样不带认证需要搭配 HMAC 使用。⚡ .NET 里怎么用如果你的项目是 .NET Core 3 及以上直接用 GCM别回头看 CBC。using System.Security.Cryptography; // GCM 模式——目前推荐的做法 var key RandomNumberGenerator.GetBytes(32); // 256 位密钥 var nonce RandomNumberGenerator.GetBytes(12); // GCM 推荐 12 字节随机数 byte[] ciphertext; byte[] tag; using var aes new AesGcm(key, 16); // 认证标签 16 字节 var plaintext Encoding.UTF8.GetBytes(要加密的内容); ciphertext new byte[plaintext.Length]; tag new byte[16]; // 加密输出密文 认证标签 aes.Encrypt(nonce, plaintext, ciphertext, tag); // 解密认证标签不匹配直接抛异常 try { var decrypted new byte[ciphertext.Length]; aes.Decrypt(nonce, ciphertext, tag, decrypted); var result Encoding.UTF8.GetString(decrypted); Console.WriteLine($解密成功{result}); } catch (CryptographicException) { Console.WriteLine(数据被篡改过别用); }如果你的项目还在跑 .NET Framework 4.x只能用 CBC 模式。这种情况下三个硬规则IV 必须随机、和密文一起存、一次一密。// CBC 模式——老项目用这个 using var aes Aes.Create(); aes.Mode CipherMode.CBC; aes.KeySize 256; aes.GenerateKey(); // 生产环境密钥放 Key Vault aes.GenerateIV(); // IV 必须每次随机生成 using var encryptor aes.CreateEncryptor(); var plaintext Encoding.UTF8.GetBytes(要加密的内容); var ciphertext encryptor.TransformFinalBlock(plaintext, 0, plaintext.Length); // IV 需要和密文一起存解密时拿出来用 var result aes.IV.Concat(ciphertext).ToArray(); 实际开发中到底用在哪儿数据库敏感字段加密用户的手机号、身份证号、银行卡号入库前用 AES 加密。别直接对密文做 LIKE 模糊查询——密文不按套路出牌。推荐做法是敏感字段加密存储完整值查询用哈希值建索引或者直接用数据库自带的 Always Encrypted 功能。配置文件保护数据库连接字符串、第三方 API Key 别明文躺在appsettings.json里。ASP.NET Core 的 Data Protection API 内置了自动密钥轮换和 AES 算法封装。容器化部署需要额外配置密钥持久化路径不然每次重启换个密钥上次密文全解密不了。文件落盘加密用户上传的身份证照片、合同 PDF 存到 OSS 或本地磁盘前先过一层 AES。大文件别一次性加载进内存——用CryptoStream流式处理分块读写。GCM 适合静态文件整体加密CTR 模式适合流式传输但需要额外补 HMAC 做认证。数据在外部传输已经有 HTTPS 了应用层再套一层 AES 多数属于画蛇添足——双重加密不仅浪费 CPU还可能引入额外的密钥分发问题。只有在端到端需要独立于 TLS 协议层的加密时才加。❌ 几个让你前功尽弃的坑密钥硬编码很多人图方便直接把密钥写在配置文件里。代码一提交 GitHub密钥就全网公开了。生产环境用 Azure Key Vault、AWS KMS 或 HashiCorp Vault 管密钥别跟自己饭碗开玩笑。ECB 还活着年轻同事不知道模式有什么后果随手就CipherMode.ECB。代码审查碰到这个直接打回我老团队的 Reviewer 碰见 ECB 连原因都不写直接给 -1。用错算法有人到处搜教程抄回来一个DES或RC2——这些算法早就被破了现代计算机几小时暴力就能搞定。.NET 下直接用Aes.Create()它会给你当前平台最优的 AES 实例。IV 写死有人为了“不出错”把 IV 写了个常量。CBC 下相同密钥 相同 IV 相同明文 相同密文加密模式直接退化回 ECB。IV 不需要保密但必须每次加密随机生成。 总结AES 干了二十多年至今没被打趴下证明它的数学底子足够硬。但算法再硬也架不住用的人瞎搞——选 ECB 模式、IV 写死、密钥硬编码任何一个低级错误都能让 AES 变成玻璃窗。用 GCM选对密钥长度IV 每次随机生成管好你的密钥。这四条做到了AES 就是你系统里最硬的那块骨头。做不到它就是你自欺欺人的遮羞布。

相关文章:

.NET AES 讲透:从 ECB 到 GCM,到底差在哪?

AES,全称高级加密标准(Advanced Encryption Standard)。简单说,它是目前全球最主流的对称加密算法:同一把钥匙负责加密和解密。 HTTPS、手机文件加密、数据库、云存储……现代互联网里大量“数据保密”场景&#xff0…...

深度解析:开源AI框架如何实现智能文档转换与自动化工作流

深度解析:开源AI框架如何实现智能文档转换与自动化工作流 【免费下载链接】PPTAgent An Agentic Framework for Reflective PowerPoint Generation 项目地址: https://gitcode.com/gh_mirrors/pp/PPTAgent PPTAgent是一个基于多代理架构的开源AI框架&#xf…...

3分钟解锁B站评论区的“读心术“:揭秘用户真实身份的完整指南

3分钟解锁B站评论区的"读心术":揭秘用户真实身份的完整指南 【免费下载链接】bilibili-comment-checker B站评论区自动标注成分,支持动态和关注识别以及手动输入 UID 识别 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-comment-c…...

GitHub星标6.6k+的WindTerm,除了快还有这些隐藏技巧:自动补全、锁屏密码重置、主题切换

GitHub星标6.6k的WindTerm高阶技巧:解锁专业级终端体验 当大多数用户还在用默认配置与终端工具"和平共处"时,真正的效率追求者早已开始挖掘那些藏在菜单深处的生产力加速器。作为GitHub上获得6.6k星标的现象级终端工具,WindTerm的…...

单细胞分析实战:用scVI和scANVI搞定多批次数据整合(附完整Python代码)

单细胞分析实战:用scVI和scANVI搞定多批次数据整合(附完整Python代码) 在单细胞RNA测序(scRNA-seq)研究中,数据整合是一个无法回避的挑战。当你手头的数据来自不同实验批次、不同测序平台或不同实验室时&am…...

error while updating dependencies: node_modules包资源权限报错 缓存包构建

vue3vite - 解决报错error while updating dependencies:Error:EACCES:permission denied,mkdir ‘x‘(系统权限问题) 问题说明 在vite vue3项目开发中,出现报错: [vitel error while updating dependencies: Error:EACCES:permission deni…...

攻防世界——echo-server(花指令)

查壳 elf Ubuntu系统写的,用kali运行会报错找到主函数,双击进入loc_80487C1不是很懂,看了大佬的说是花指令常见的花指令机器码 9A,E8,E9,EB 把垃圾数据用nop(0x90h)填充切换到汇编试图将loc_80487C1右键转换成未定义的数据对loc_80487C4进行c…...

人机协同中的“因为-所以”、“if-then”(如果-那么)

在人机协同中,“因为-所以”和“if-then”(如果-那么)是两种截然不同但紧密相关的逻辑范式。简单来说,“if-then”是机器的“计算”语言,而“因为-所以”是人类“算计(谋算)”与因果推理的核心。…...

手把手教你移植μGUI到STM32F103:一个文件搞定单片机图形界面

从零构建STM32图形界面:μGUI移植实战指南 在嵌入式开发中,图形用户界面(GUI)的实现往往令人望而生畏。市面上虽然有诸多成熟的GUI解决方案,但对于资源有限的STM32F103系列单片机来说,轻量级的μGUI无疑是一个理想选择。本文将带…...

ADAU1701的隐藏玩法:不写代码,用SigmaStudio模块库实现5.1虚拟环绕和动态低音

ADAU1701音效魔法:零代码打造虚拟环绕与智能低音系统 在追求极致音效体验的今天,专业级音频处理不再是大型音响厂商的专利。借助ADAU1701这颗强大的音频DSP芯片和SigmaStudio图形化开发环境,即使没有任何DSP编程经验的开发者,也能…...

从PI到PR:静止坐标系下永磁同步电机电流控制的新范式

1. 永磁同步电机控制的痛点与变革 每次调试永磁同步电机(PMSM)时,最让人头疼的就是参数漂移问题。记得去年做伺服系统项目,电机运行半小时后电流波形就开始畸变——电感值因温升变化了15%,导致PI控制器输出的d轴电流出…...

C加加开发者如何通过Taotoken快速接入多模型API服务

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 C开发者如何通过Taotoken快速接入多模型API服务 1. 场景与需求 在C后端服务中集成大模型能力时,开发者常面临几个实际…...

从PCB布线到外壳开孔:一个智能硬件产品的EMC设计避坑全记录

从PCB布线到外壳开孔:一个智能硬件产品的EMC设计避坑全记录 在智能硬件产品的研发过程中,电磁兼容性(EMC)设计往往是决定产品能否顺利通过认证测试的关键因素。作为一名经历过多次EMC整改的硬件工程师,我想通过一个真实…...

开源本地AI API网关:统一管理Ollama等模型,简化LLM应用开发

1. 项目概述:一个开源的本地AI API网关最近在折腾本地大语言模型(LLM)的朋友,估计都遇到过类似的烦恼:模型装好了,界面也跑起来了,但想把它集成到自己的应用里,或者想用一套统一的接…...

uni-app安卓云打包实战:三种证书方案详解与避坑指南

1. 为什么需要关注安卓打包证书? 第一次接触uni-app安卓云打包的开发者,往往会在证书选择环节卡壳。我自己刚入门时也踩过坑——用测试证书打了包,结果应用商店审核被拒,白白浪费两周时间。证书不仅是APK的"身份证"&…...

macOS开发环境标准化实践:基于Homebrew的CUR环境构建

1. 项目概述与核心价值最近在折腾macOS开发环境,尤其是涉及到一些需要特定编译工具链的项目时,经常被各种依赖和版本问题搞得焦头烂额。相信很多从Linux或Windows转过来的开发者都有同感,macOS虽然优雅,但在某些底层开发工具的生态…...

别再折腾LibreOffice了!CentOS 7.9上老牌Apache OpenOffice 4.1.14的完整部署与后台服务化指南

在CentOS 7.9上部署Apache OpenOffice 4.1.14作为无头文档处理服务的完整指南 对于需要在Linux服务器上搭建稳定文档处理服务的运维和开发人员来说,Apache OpenOffice仍然是一个值得考虑的选择。尽管LibreOffice在功能和社区支持上更为活跃,但在某些特定…...

动态路由协议与BGP路径属性:网络工程师的核心必修课

1. 从“路标”到“地图”:动态路由协议的核心价值 在网络世界里,路由器就像一个个十字路口的交通警察。如果每个路口都需要手动设置去往所有目的地的路牌,那不仅工作量巨大,一旦某条路临时施工或封闭,整个城市的交通都…...

大语言模型角色扮演技术:从原理到实践的完整指南

1. 项目概述:当大语言模型学会“扮演”角色最近在GitHub上看到一个挺有意思的项目,叫“awesome-llm-role-playing-with-persona”。光看名字,你大概能猜到它和大型语言模型以及角色扮演有关。简单来说,这个项目整理了一个资源列表…...

如何彻底解决Windows电脑自动锁屏问题:终极鼠标模拟工具使用指南

如何彻底解决Windows电脑自动锁屏问题:终极鼠标模拟工具使用指南 【免费下载链接】mousejiggler Mouse Jiggler is a very simple piece of software whose sole function is to "fake" mouse input to Windows, and jiggle the mouse pointer back and f…...

HFSS扫频实战:三种扫频类型的选择策略与性能对比

1. HFSS扫频分析基础:为什么需要扫频? 刚接触HFSS仿真时,很多工程师都会疑惑:为什么不能直接计算目标频点的S参数?这个问题就像用相机拍照——单点频率仿真相当于只拍一张静态照片,而扫频分析则是录制一段视…...

PowerVR Series2NX NNA架构解析:终端AI加速器的能效与工程实践

1. 项目概述:从“看得见”到“看得懂”的芯片革命在移动设备、智能摄像头乃至汽车座舱里,我们早已习惯了人脸解锁、实时美颜、物体识别这些功能。这些功能背后,都离不开一个核心引擎:神经网络加速器。今天要聊的,就是I…...

从赛博朋克到量子有机体,未来主义风格演进全图谱,深度解析MJ 5.2→6.2→NijiV6的渲染范式跃迁

更多请点击: https://intelliparadigm.com 第一章:赛博朋克到量子有机体:未来主义视觉范式的哲学跃迁 当霓虹雨巷中的义体少女凝视全息广告牌,她瞳孔倒映的已不仅是资本编码的欲望图景,而是意识与拓扑量子态耦合的初始…...

NocoDB企业数据管理平台:如何用可视化数据库解决业务协作难题

NocoDB企业数据管理平台:如何用可视化数据库解决业务协作难题 【免费下载链接】nocodb 🔥 🔥 🔥 A Free & Self-hostable Airtable Alternative 项目地址: https://gitcode.com/GitHub_Trending/no/nocodb 在数字化转型…...

别再手动写CSS了!用Vue3 + Tailwind CSS 5分钟搞定一个响应式卡片组件

用Vue3与Tailwind CSS极速构建响应式卡片组件的实战指南 前端开发领域正在经历一场效率革命。过去需要数小时才能完成的UI组件开发,如今借助现代工具链可以在几分钟内实现。本文将带你体验如何通过Vue3的单文件组件特性与Tailwind CSS的实用优先(Utility-First)方法…...

别再只盯着动态功耗了!聊聊CMOS数字电路里那个容易被忽略的‘小透明’——静态功耗

别再只盯着动态功耗了!聊聊CMOS数字电路里那个容易被忽略的‘小透明’——静态功耗 在数字电路设计的课堂上,我们总是反复强调动态功耗的计算与优化——开关电容充放电、时钟门控、频率缩放,这些概念几乎成了低功耗设计的代名词。但当你真正打…...

终极指南:如何一键将小米智能家居全面接入HomeAssistant

终极指南:如何一键将小米智能家居全面接入HomeAssistant 【免费下载链接】hass-xiaomi-miot Automatic integrate all Xiaomi devices to HomeAssistant via miot-spec, support Wi-Fi, BLE, ZigBee devices. 小米米家智能家居设备接入Hass集成 项目地址: https:/…...

基于ReAct范式的链式追踪工具:提升学术研究效率的AI智能体实践

1. 项目概述与核心价值如果你经常需要做文献调研、追踪某个科学概念的源头,或者想搞清楚一个复杂话题背后的证据链,那你一定体会过在搜索引擎和无数个学术网站之间反复横跳的痛苦。传统的搜索方式,比如在Google Scholar里输入一个关键词&…...

AI圈大事!网友:太离谱了~

最近技术圈友发生了件大事:今年 2 月刚刚开源的 Hermes Agent,GitHub star 数已超过 106k。有些同学可能还不太了解,我们先来说说 Hermes 是什么。它不是简单的聊天机器人,是能自己做事、会学习、越用越聪明的数字员工。为啥能火成…...

GroundingDINO SwinT与SwinB配置实战对比:零样本目标检测的架构选择策略

GroundingDINO SwinT与SwinB配置实战对比:零样本目标检测的架构选择策略 【免费下载链接】GroundingDINO [ECCV 2024] Official implementation of the paper "Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection"…...