C# 文件上传的服务器端加密 C#如何在存储到S3或Azure Blob时启用加密

必须在IFormFile流读取完成后、写入S3前加密,使用AesGcm或AesCryptoServiceProvider,密钥和nonce须安全存储于配置或Key Vault,S3 ContentLength需设为加密后真实长度。ASP.NET Core 中上传文件后立即加密再传 S3直接在内存中加密,避免明文临时落盘。关键不是"能不能加",而是"在哪一环加"------必须在 IFormFile 流读取完成后、写入 S3 前完成加密,否则等于没加。用 AesGcm(.NET 5+)或 AesCryptoServiceProvider(兼容旧版),别用已弃用的 RijndaelManaged密钥和 nonce 必须随文件一起安全传递(比如存进数据库元数据),但 绝不能硬编码在代码里,推荐从 IConfiguration 读取或使用 Azure Key VaultS3 SDK 的 PutObjectRequest 接收的是 Stream,所以把加密后的 MemoryStream 直接传进去即可,无需保存本地文件注意:加密流长度 ≠ 原始流长度(GCM 会加认证标签),S3 的 ContentLength 必须设为加密后的真实字节数,否则上传失败或校验出错Azure Blob Storage 上传前启用客户端加密(非服务端加密)Azure SDK 支持客户端加密,但默认不开启;它和 S3 的"服务端加密(SSE)"不是一回事------这里说的是你控制密钥、在上传前就加密,Blob 存的永远是密文。必须用 Azure.Storage.Blobs.Specialized.EncryptedBlobClient,普通 BlobClient 不行密钥需封装为 KeyEncryptionKey 实现类(如 LocalKeyEncryptionKey),且 KeyWrapAlgorithm 推荐 "A256KW"加密只对块 Blob 有效,Page Blob 和 Append Blob 不支持客户端加密上传时若用 UploadAsync(Stream, ...),传入的必须是原始明文流;SDK 内部自动加密,不需要你手动调 Encrypt()解密时也必须用同一个 EncryptedBlobClient,否则抛 InvalidCiphertextException常见错误:以为启用了 SSE 就等于文件被加密了SSE(Server-Side Encryption)只是云厂商帮你用他们的密钥加密存储磁盘,你上传的仍是明文------中间链路、日志、代理缓存、甚至开发环境调试输出都可能暴露内容。 Mokker AI AI产品图添加背景

相关推荐
杨充6 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法
meilindehuzi_a6 小时前
深入浅出数据结构:Python 字典(Dict)与集合(Set)的哈希表底层全链路追踪
数据结构·python·散列表
Lucas凉皮7 小时前
20243408 2025-2026-2 《Python程序设计》综合实践报告
python·实验报告
键盘上的猫头鹰7 小时前
【MySQL 教程(八)】索引、事务、用户管理、导入导出与分页查询
数据库·python·mysql
Royzst7 小时前
数据库知识点
数据库
雪的季节7 小时前
企业级 Qt 全功能项目
开发语言·数据库·qt
薛定谔的猫-菜鸟程序员7 小时前
2小时智能体开发一个智能体?我用CodeArts Agent 和 AtomCode 开发了一个适老化智能体。
人工智能·python·agent
宋浮檀s7 小时前
应急响应——Web漏洞:命令执行+SSRF+弱口令
运维·数据库·sql·网络安全·oracle·应急响应
bigfootyazi8 小时前
python爬虫-基本库-urllib库(常用速查)
开发语言·爬虫·python
瑶总迷弟8 小时前
使用 mis-tei 在昇腾310P上部署 bge-m3模型
pytorch·python·华为·语言模型·自然语言处理·cnn·unix