讲师中心 微信公众号
AI工具推荐 视频效率加速

C#文件数字签名 C#如何对文件进行签名和验证签名

千宇吖_6973

千宇吖_6973

发布时间:2026-03-10 13:19:03

|

766人浏览过

|

来源于php中文网

原创

C#中用RSA+SHA256对文件数字签名需先流式计算SHA256哈希值,再用私钥调用SignHash签名;验证时须用相同哈希算法和公钥调用VerifyHash;密钥应安全存储于证书存储或密钥管理服务,避免硬编码。

c#文件数字签名 c#如何对文件进行签名和验证签名

如何用 C# 对文件做数字签名(使用 RSA + SHA256)

直接用 RSACng(推荐)或 RSACryptoServiceProvider 生成签名,核心是「对文件哈希值签名」,不是对原始文件内容直接签名。常见错误是试图签名整个大文件导致内存溢出或超时。

  • 先用 SHA256.Create() 计算文件的哈希值(byte[]),不要读全文件到内存——用 FileStream 配合 ComputeHash(Stream)
  • 用私钥调用 RSA.SignHash() 签名哈希值,指定 HashAlgorithmName.SHA256 和 RSAEncryptionPadding.Pkcs1
  • 签名结果是字节数组,通常保存为 .sig 文件或与原文件同名追加后缀(如 file.txt.sig)
  • 注意:.NET 5+ 中 RSACryptoServiceProvider 已标记为过时,优先用 RSACng 或 RSA.Create()(后者在 Windows 上默认返回 RSACng)

如何用 C# 验证文件签名是否有效

验证必须用和签名时**完全相同的哈希算法**和**对应的公钥**。常见错误是公钥格式不匹配(XML vs Pem)、哈希算法写错(比如签名用 SHA256 却用 SHA1 验证),或误把签名文件当原文件传入验证流程。

  • 重新计算原文件的 SHA256 哈希值(同样用流式读取)
  • 加载公钥(可用 RSA.ImportFromPem() 直接读 PEM 格式,或 RSA.FromXmlString() 读 XML;注意 .NET Core 3.0+ 才支持 ImportFromPem)
  • 调用 RSA.VerifyHash(),传入哈希字节、签名字节、HashAlgorithmName.SHA256 和 RSAEncryptionPadding.Pkcs1
  • 返回 true 表示签名有效且文件未被篡改;false 可能是签名错、密钥错、哈希错或文件被改

如何安全保存和复用密钥(避免硬编码私钥)

把私钥字符串写死在代码里等于公开密钥。生产环境必须隔离密钥生命周期——签名服务应独占私钥访问权限,验证端只需公钥。

C#
C#

"避开 C# 常见错误——空陷阱、异步陷阱、LINQ 陷阱及资源泄漏。"

下载
  • 私钥建议存于 Windows Certificate Store(用 X509Store + Find() 检索含私钥的证书),或 Azure Key Vault / AWS KMS 等密钥管理服务
  • 公钥可导出为 PEM:rsa.ExportRSAPublicKeyPem()(.NET 5+),或用 rsa.ExportParameters(false) 得到 XML
  • 若必须文件存储,请确保私钥文件权限严格(Windows 下 ACL 限制,Linux 下 chmod 600),且不提交到 Git(加入 .gitignore)
  • 避免用 RSACryptoServiceProvider.ToXmlString(true) 导出含私钥的 XML——该方法已过时且易泄露

遇到 “Invalid algorithm specified” 或 “Key not valid for use in specified state” 怎么办

这两类错误基本都源于算法不匹配或密钥状态异常,不是代码逻辑问题。

  • "Invalid algorithm specified":检查 SignHash() 和 VerifyHash() 中的 HashAlgorithmName 是否一致,且与签名时实际用的哈希一致(例如不能用 SHA1 去验 SHA256 签名)
  • "Key not valid for use in specified state":多见于从证书加载私钥后未正确设置可导出标志(X509KeyStorageFlags.Exportable),或证书私钥被标记为不可导出(CSP 属性限制)
  • 调试时可用 rsa.KeySize 和 rsa.PublicOnly 检查密钥是否加载成功、是否含私钥
  • 跨平台部署注意:RSACng 仅 Windows,Linux/macOS 应用 RSA.Create() 并确保运行时支持(.NET 5+ 默认兼容)

签名本身不加密文件内容,只保证完整性与来源可信;如果还需保密性,得额外套一层加密(如 AES)。密钥管理和哈希一致性是实际落地中最容易被跳过的环节。

热门AI工具

更多
Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2883

2023.08.11

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

7210

2024.03.19

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

6766

2024.03.19

c#是什么意思
c#是什么意思

C#是一种通用的面向对象编程语言,它在.NET框架上运行,可用于开发各种类型的应用程序。本专题为大家提供c#相关的各种文章、以及下载和课程。

1132

2023.08.08

什么是c#
什么是c#

C#(读作C Sharp)是一种现代的、通用的、面向对象的编程语言。它由微软公司开发,于2000年首次发布,主要用于开发Windows桌面应用程序、Web应用程序、移动应用程序以及游戏开发等领域。C#是一种类型安全和托管的编程语言,它结合了C++的强大性能和C语言的简单易学特点,并引入了许多新的特性和概念,如委托、属性、泛型和异步编程等,以提高开发效率和代码可维护性。

3371

2023.08.31

C#中base关键字的用法
C#中base关键字的用法

在C#中,base关键字用于访问当前类的基类成员,这包括基类的字段、属性、方法、构造函数、索引器以及事件。想了解更多C#的相关内容,可以阅读本专题下面的文章。

945

2024.03.13

C#Task用法
C#Task用法

Task在C#中是用于表示异步操作的对象,它位于System.Threading.Tasks命名空间中。想了解更多C#中各种用法的相关内容,可以阅读本专题下面的文章。

2655

2024.03.14

C# 并发与异步编程
C# 并发与异步编程

本专题系统讲解 C# 异步编程与并发控制,重点介绍 async 和 await 关键字、Task 类、线程池管理、并发数据结构、死锁与线程安全问题。通过多个实战项目,帮助学习者掌握 如何在 C# 中编写高效的异步代码,提升应用的并发性能与响应速度。

352

2026.02.03

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn