4

.NET 签名的程序集包含公钥,但是公钥在 RSA 中用于加密,那么 .NET 是如何使用公钥来解密签名程序集的呢?

好的,签名的程序集包含散列,但散列是使用私钥而不是公钥加密的。那么,为什么以及如何在 .NET 中使用私钥进行加密,使用公钥进行解密。我的意思是,像 RSACryptoPad 这样的所有软件都使用公钥进行加密而不是解密。

4

3 回答 3

6

公私密钥对不用于加密整个程序集。相反,它用于签署程序集。

稍微简化一下,要签署文件(例如程序集),您需要对该文件进行哈希处理,然后使用您的私钥对该哈希进行加密。使用该文件的人通过自己对文件进行哈希来验证您的签名,然后使用您的公钥解密您的加密哈希并确认这两个哈希相同。这证明了两件事:

  1. 该程序集来自声称来自谁 - 即您 - 因为它是使用您的私钥生成的。
  2. 该程序集未被其他人更改,因为您在发布程序集时所做的哈希与当前哈希相同。没有人可以更改签名的程序集,因为他们还必须对需要您的私钥的加密哈希进行相应的更改。

在这篇 Wikipedia 文章中有更多关于数字签名的详细信息。

公钥-私钥对的好处在于它们可以左右工作。所以用你的私钥加密的东西只能用你的公钥解密,但用你的公钥加密的东西也可以用你的私钥解密。后一种用法意味着如果有人想向您发送某些东西,并且只有您可以使用您免费提供的公钥对其进行加密,但他们知道只有您使用您的私钥才能对其进行解密。

由于密钥只能成对工作 - 使加密不对称- 其他人不能简单地反转他们使用公钥完成的加密以将消息发送给您。

于 2009-03-22T07:17:31.437 回答
3

这个想法是只能使用私钥创建签名,但之后任何拥有公钥副本的人都可以验证签名签名不需要解密——签名只是简单地添加到纯文本程序集中。

于 2009-03-22T06:39:14.713 回答
1

签署程序集的目的是验证其来源。如果我签署了我的程序集然后将其发送给您,您应该有理由确定它来自我并且在此过程中没有被篡改。

于 2009-03-22T06:51:10.597 回答