当前位置:首页 > 实用技巧 >

怎么开启数字签名(关闭数字签名的方法)

来源:原点资讯(www.yd166.com)时间:2023-12-25 09:17:21作者:YD166手机阅读>>

数字签名是一种用于验证数字文档的技术,它可以确保文档的完整性和来源。本文将介绍数字签名的概念和原理,以及如何使用.Net Core创建和验证数字签名。

什么数字签名?

数字签名的原理是使用非对称加密算法,即公钥和私钥。公钥是公开的,任何人都可以用它来验证签名,而私钥是保密的,只有签名者才能用它来创建签名。数字签名的过程如下:

  • 签名者使用私钥对文档的哈希值进行加密,得到数字签名。

  • 签名者将文档和数字签名一起发送给接收者。

  • 接收者使用公钥对数字签名进行解密,得到文档的哈希值。

  • 接收者使用相同的哈希算法对文档进行哈希,得到文档的哈希值。

  • 接收者比较两个哈希值,如果相同,说明文档没有被篡改,且来源可信。

点个关注吧????

.Net Core中如何使用数字签名

.Net Core提供了一些类和方法来生成密钥、签名和验证,使用很方便。我们以一个简单的示例来说明,假设有这样一个文档,内容如下:

Hello, this is a document that needs to be signed.

我们目的是使用数字签名来保护这个文档的完整性和来源。以下是具体的步骤:

一、创建密钥

创建数字签名的第一步是获取公钥和私钥,我们可以有两种方式来获取密钥,一种是以编程方式生成密钥,另一种是通过外部工具创建导入。

1、以编程方式生成密钥

首先,我们需要创建一个RSA对象,用于生成公钥和私钥。可以使用RSA.Create方法来创建一个RSA对象,也可以使用RSACryptoServiceProvider类的构造函数来创建一个RSACryptoServiceProvider对象,它是RSA类的一个子类。例如:

// 使用RSA.Create方法创建一个RSA对象RSA rsa = RSA.Create;
// 使用RSACryptoServiceProvider类的构造函数创建一个RSACryptoServiceProvider对象RSACryptoServiceProvider rsa = new RSACryptoServiceProvider;

然后,我们需要导出公钥和私钥,以便于存储和传输。可以使用RSA.ExportRSAPublicKey方法和RSA.ExportRSAPrivateKey方法来导出公钥和私钥,它们会返回一个字节数组,表示公钥和私钥的二进制格式。例如:

// 创建一个 RSA 对象RSA rsa = RSA.Create;rsa.KeySize = 2048;
/********可保存到文件或数据库*********/// 导出公钥byte publicKey = rsa.ExportRSAPublicKey;// 导出私钥byte privateKey = rsa.ExportRSAPrivateKey;

/********创建RSA对象存储密钥*********/// 导出公钥RSAParameters publicKeyParameters = rsa.ExportParameters(false);// 导出私钥RSAParameters privateKeyParameters = rsa.ExportParameters(true);
// 创建一个新的RSA对象,用于存储公钥RSA publicKey = RSA.Create;// 导入公钥参数publicKey.ImportParameters(publicKeyParameters);
// 创建一个新的RSA对象,用于存储私钥RSA privateKey = RSA.Create;// 导入私钥参数privateKey.ImportParameters(privateKeyParameters);

2、通过外部工具创建导入

首先,我们需要使用一些外部工具,例如OpenSSL或者Windows的证书管理器,来创建一个X.509证书或者一个Pem文件,它们包含了公钥和私钥。例如,通过以下的命令来使用OpenSSL创建一个X.509证书:

# 生成一个私钥openssl genrsa -out mykey.pem 2048
# 生成一个自签名的证书openssl req -new -x509 -key mykey.pem -out mycert.pem -days 365

然后,使用以下的代码来从一个X.509证书中导入公钥和私钥:

// 从一个文件中加载一个X.509证书X509Certificate2 cert = new X509Certificate2("mycert.pfx", "password");
// 从X.509证书中获取RSA公钥RSA publicKey = cert.GetRSAPublicKey;
// 从X.509证书中获取RSA私钥RSA privateKey = cert.GetRSAPrivateKey

或者,使用以下的代码来从一个Pem文件中导入公钥和私钥:

//公钥string publicPem = "-----BEGIN PUBLIC KEY-----MIGfM……";//私钥string privatePem = "-----BEGIN PRIVATE KEY-----MIICdg……";
RSA publicKey = RSA.Create;// 导入公钥publicKey.ImportFromPem(publicPem);
RSA privateKey = RSA.Create;//导入私钥privateKey.ImportFromPem(privatePem);

二、创建和验证数字签名

无论我们是以编程方式生成密钥,还是通过外部工具创建导入,我们都可以使用相同的方法来使用密钥创建和验证数字签名。以下是具体的步骤:

首先,我们需要对文档进行哈希,以便于生成数字签名,可以使用SHA256类来计算文档的哈希值,使用SHA256.ComputeHash方法来对文档的字节数组进行哈希,它会返回一个字节数组,表示文档的哈希值。例如:

// 创建一个SHA256对象SHA256 sha256 = SHA256.Create;
// 将文档转换为字节数组byte document = Encoding.UTF8.GetBytes("Hello, this is a document that needs to be signed.");
// 对文档进行哈希byte hash = sha256.ComputeHash(document);

然后,我们需要使用私钥对文档的哈希值进行加密,以生成数字签名。可以使用RSA.SignHash方法来对文档的哈希值进行加密,它会返回一个字节数组,表示数字签名。同时指定哈希算法的名称和填充模式,这里我们使用SHA256Pkcs1。例如:

// 使用私钥对文档的哈希值进行加密,生成数字签名byte signature = privateKey.SignHash(hash, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);

最后,我们需要使用公钥对数字签名进行解密,以验证文档的完整性和来源。可以使用RSA.VerifyHash方法来对数字签名进行解密,它会返回一个布尔值,表示验证的结果。同时指定相同的哈希算法名称和填充模式,例如:

// 使用公钥对数字签名进行解密,验证文档的完整性和来源bool result = publicKey.VerifyHash(hash, signature, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);

如果resulttrue,说明文档没有被篡改,且来源可信,如果为false 说明文档可能被篡改,或者来源不可信。

数字签名可以保护文档的真实性和完整性,是安全文档管理的关键技术。通过ASP.NET Core,我们可以轻松地在应用程序中实现数字签名的功能。

参考资料:

https://stackoverflow.com/questions/50227580/create-x509certificate2-from-pem-file-in-net-corehttps://stackoverflow.com/questions/243646/how-to-read-a-pem-rsa-private-key-from-nethttps://stackoverflow.com/questions/52383226/specify-web-service-x509-certificate-endpoint-identity-in-net-corehttps://github.com/dotnet/aspnetcore/issues/4706

文章出自猿惑豁微信公众号

栏目热文

怎样在手机屏幕上进行电子签名(电子签名为什么在手机显示不出来)

怎样在手机屏幕上进行电子签名(电子签名为什么在手机显示不出来)

随着科技的发展,电子合同已经成为了我们日常生活和工作中不可或缺的一部分。对于许多人来说,如何在手机上进行电子签名仍然是一...

2023-12-25 10:00:52查看全文 >>

电脑怎么打开数字签名(怎么关闭电脑数字签名)

电脑怎么打开数字签名(怎么关闭电脑数字签名)

数字签名是对以数字方式创建的文件进行真实性验证的信息记录,是以特定的算法将私钥加密过的密文和公钥公布出去,使用时以公钥...

2023-12-25 09:57:43查看全文 >>

如何解决电脑数字签名的问题(电脑出现无法验证文件的数字签名)

如何解决电脑数字签名的问题(电脑出现无法验证文件的数字签名)

一位同事找到我,说他的电脑今天无法开机了,开机显示如下界面,大概意思是文件数字签名出错了。如图的出错信息,文件:\win...

2023-12-25 09:46:15查看全文 >>

如何从主板关掉数字签名(bios怎么关闭数字签名)

如何从主板关掉数字签名(bios怎么关闭数字签名)

随着windows的更新,微软对驱动签名的邀请越来月严格。Windows 10 1607 以后的内核驱动没有微软签名都不...

2023-12-25 09:44:49查看全文 >>

电脑每次开机都要数字签名怎么办(电脑开机黑屏无法验证数字签名)

电脑每次开机都要数字签名怎么办(电脑开机黑屏无法验证数字签名)

针对win10常见的三大问题我给出了解决方法,欢迎大家评论区讨论,交流。不能使用打印机大家都知道,Win10可以自动安装...

2023-12-25 09:55:34查看全文 >>

电脑开机说无法认证数字签名(电脑开机黑屏无法验证数字签名)

电脑开机说无法认证数字签名(电脑开机黑屏无法验证数字签名)

计算机显示计算机/设备当计算机为蓝屏时,给出的说明无法验证此文件的数字签名或其选项的数字签名。那么我应该这样做,因为系统...

2023-12-25 10:00:05查看全文 >>

在电脑上怎么设置数字签名(在电脑上怎么找到打印机设置)

在电脑上怎么设置数字签名(在电脑上怎么找到打印机设置)

数字证书是个神奇的东西它可以保证软件不被修改,也可以表明文件的发布日期,最重要的,可以很大程度的减少杀毒软件的误报,当然...

2023-12-25 09:51:12查看全文 >>

银装素裹为啥改成红装素裹(为什么是红装素裹而不是银装素裹)

银装素裹为啥改成红装素裹(为什么是红装素裹而不是银装素裹)

沁园春·雪近代 · 毛泽东北國風光,千里冰封,萬里雪飄。望長城內外,惟余莽莽;大河上下,頓失滔滔。山舞銀蛇,原馳蠟象,欲...

2023-12-25 09:32:10查看全文 >>

看银装素裹分外妖娆翻译(银装素裹分外妖娆什么意思)

看银装素裹分外妖娆翻译(银装素裹分外妖娆什么意思)

《沁园春--雪》是伟大领袖毛主席的著名词章,创作于1936年,1945年重庆谈判时,赠给柳亚子先生,在10月14日《新民...

2023-12-25 09:41:59查看全文 >>

秋魂中的银装素裹是什么意思(冬天的校园银装素裹什么意思)

秋魂中的银装素裹是什么意思(冬天的校园银装素裹什么意思)

内容大纲1、自然景观的诗意美学2、艺术与冬季的交相辉映3、人文与冬季的诗意交融4、结语(全文大约6400字)冬季,是大自...

2023-12-25 09:18:49查看全文 >>

文档排行