ASP.NET Core:创建并验证文档上的数字签名

什么是数字签名?

数字签名是一种加密技术,用于确保数字文档或消息的真实性、完整性和不可否认性。它涉及使用私钥生成文档的唯一数字指纹,并使用相应的公钥进行验证。

为什么要使用数字签名?

数字签名提供了一种确保电子文档来源和完整性的安全方法。它广泛应用于电子交易、法律合同和安全通信协议,以防止篡改和未经授权的访问。

何时使用数字签名?

数字签名在处理敏感或具有法律约束力的文件(例如合同、金融交易和官方记录)时尤其有用。它们提供了一种安全验证电子数据真实性和完整性的方法。

如何在 ASP.NET Core 中创建和验证数字签名

要在 ASP.NET Core 中创建和验证文档的数字签名,可以使用加密库(例如 BouncyCastle 或 .NET 内置的 System.Security.Cryptography 命名空间)。下面,我将概述使用 .NET 内置的 RSACryptoServiceProvider 类创建和验证数字签名的步骤。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

创建数字签名

using System;

using System.Security.Cryptography;

using System.Text;

public class DigitalSignatureService

{

public byte[] CreateDigitalSignature(string document, RSAParameters privateKey)

{

using (var rsa = new RSACryptoServiceProvider())

{

rsa.ImportParameters(privateKey);

byte[] data = Encoding.UTF8.GetBytes(document);

byte[] signature = rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);

return signature;

}

}

}

验证数字签名

public class DigitalSignatureService

{

public bool VerifyDigitalSignature(string document, byte[] signature, RSAParameters publicKey)

{

using (var rsa = new RSACryptoServiceProvider())

{

rsa.ImportParameters(publicKey);

byte[] data = Encoding.UTF8.GetBytes(document);

bool isVerified = rsa.VerifyData(data, signature, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);

return isVerified;

}

}

}

用法

public class SignatureController : Controller

{

private readonly DigitalSignatureService _signatureService;

public SignatureController(DigitalSignatureService signatureService)

{

_signatureService = signatureService;

}

public IActionResult SignDocument(string document)

{

RSAParameters privateKey; // Load private key from secure storage

byte[] signature = _signatureService.CreateDigitalSignature(document, privateKey);

// Save or send the signature along with the document

return Ok(Convert.ToBase64String(signature));

}

public IActionResult VerifySignature(string document, string signatureString)

{

byte[] signature = Convert.FromBase64String(signatureString);

RSAParameters publicKey; // Load public key from sender or trusted source

bool isVerified = _signatureService.VerifyDigitalSignature(document, signature, publicKey);

if (isVerified)

return Ok("Signature is valid.");

else

return BadRequest("Signature verification failed.");

}

}

笔记

确保安全地存储私钥并分发公钥以验证签名。

这是一个简化的示例;在生产中,请考虑额外的安全措施,例如密钥管理、输入验证和安全通信渠道。

ASP.NET Core 中的实现

ASP.NET Core 应用程序中,您可以将数字签名功能封装在服务类中。此服务类可以注入到需要数字签名的控制器或其他组件中。

using System;

using System.Security.Cryptography;

using System.Text;

namespace DigitalSignatureDemo.Services

{

public class DigitalSignatureService : IDigitalSignatureService

{

private const string KeyContainerName = "MyKeyContainer";

public string CreateDigitalSignature(string data)

{

using (var rsa = new RSACryptoServiceProvider())

{

rsa.PersistKeyInCsp = false;

rsa.FromXmlString(GetOrCreateKey());

var dataBytes = Encoding.UTF8.GetBytes(data);

var signatureBytes = rsa.SignData(dataBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);

return Convert.ToBase64String(signatureBytes);

}

}

public bool VerifyDigitalSignature(string data, string signature)

{

using (var rsa = new RSACryptoServiceProvider())

{

rsa.PersistKeyInCsp = false;

rsa.FromXmlString(GetOrCreateKey());

var dataBytes = Encoding.UTF8.GetBytes(data);

var signatureBytes = Convert.FromBase64String(signature);

return rsa.VerifyData(dataBytes, signatureBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);

}

}

private string GetOrCreateKey()

{

var cspParams = new CspParameters

{

KeyContainerName = KeyContainerName,

Flags = CspProviderFlags.UseMachineKeyStore | CspProviderFlags.UseExistingKey

};

using (var rsa = new RSACryptoServiceProvider(2048, cspParams))

{

return rsa.ToXmlString(true);

}

}

}

}

此代码定义了一个服务类 DigitalSignatureService,它提供了使用 RSA 算法创建和验证数字签名的方法。CreateDigitalSignature 方法接受一个字符串输入数据,并返回一个表示数字签名的 base64 编码字符串。VerifyDigitalSignature 方法接受输入数据和签名,并验证该签名对于给定数据是否有效。

GetOrCreateKey 方法用于从名为"MyKeyContainer"的密钥容器中检索现有的 RSA 密钥对,如果不存在则创建新的密钥对。

您可以将此服务注入到您的 ASP.NET Core 控制器或服务中,以将数字签名功能合并到您的应用程序中。

结论

数字签名在确保 ASP.NET Core 应用程序中电子文档的真实性和完整性方面发挥着至关重要的作用。通过遵循上述步骤,开发人员可以实现强大的数字签名功能来保护其应用程序和数据的安全。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
张3蜂1 天前
java springboot2.0 api ;.netcore8 api ;python GunicornAPI ,哪种更强?请从多个维度,对比分析
java·python·.netcore
切糕师学AI2 天前
.NET Core Web 中的健康检查端点(Health Check Endpoint)
前端·kubernetes·.netcore
xdpcxq10292 天前
.NET Core 双数据库 PostgreSQL 与 SQLite 和平共处
数据库·postgresql·.netcore
csdn_aspnet6 天前
.Net Core — Cookie 身份验证
.netcore·cookie
csdn_aspnet6 天前
在 ASP.NET Core 中实现 Cookie 身份验证
后端·asp.net·.netcore·cookie
杨大枫7 天前
.Net Core 3.1|8.0 回调Minio WebHook事件进行数据同步
.netcore·minio
吹牛不交税8 天前
admin.net框架使用记录
vue·.netcore
weixin_4219947812 天前
更复杂的结构 - 类与对象
.net·.netcore
想起你的日子14 天前
ASP.NET Core EFCore之DB First
数据库·.netcore