是否可以使用.net RSACryptoServiceProvider使用私钥加密?

gua*_*ike 18 .net cryptography rsa

我知道RSACryptoServiceProvider可以使用公钥加密,然后可以使用私钥解密.

是否可以使用私钥加密并使用RSACryptoServiceProvider使用公钥解密?

Ale*_*319 62

只是为了清理一下:

RSA既可用于加密(确保Eve无法读取Alice发送给Bob的消息),也可用于签名(确保如果Alice向Bob发送消息,Bob知道实际上是Alice发送了消息,而不是Eve假装是爱丽丝)

RSA生成一对密钥 - 公钥和私钥.RSA的设计使得如果您应用公钥然后应用私钥,反之亦然,您将收到相同的消息.并且公钥不能从私钥导出(反之亦然).

为了使用RSA进行加密,Alice使用Bob的公钥加密消息.阅读此消息的唯一方法是使用Bob的私钥,只有他拥有.因此,Eve无法阅读该消息,因为他没有此密钥.另一方面,这不提供消息源的认证.Eve还可以获取Bob的公钥(因为它是公开的)并向Bob发送消息,假装是Alice.

为了使用RSA进行签名,Alice获取消息的哈希值,使用自己的私钥加密哈希值,并将结果(这是签名)附加到消息中.Eve当然可以使用Alice的公钥解密它.但是,Bob可以使用Alice的公钥解密签名,看看它是否匹配.如果是这样,它必须使用Alice的私钥加密,只有她拥有,所以它必须来自Alice.


现在,我不熟悉.NET加密API,所以我不确定它是否与此处描述的完全一致.但是这个解释可能会帮助您理解您获得的一些答案.

  • Nitpick-RSA不保证不能从私钥派生公钥。实际上,这通常是微不足道的。[请参阅此答案。](/sf/ask/48753071/) (3认同)

sma*_*det 18

每个人都声称没有这样的东西,或者不知道RSA是如何工作的,或者他们被困在"签约"的车辙中.

用私钥加密是完全可能的,也是完全合理的.是的,这与签名相似,但这并不是大多数现代图书馆所采用的签名方式.对他们而言,这意味着计算消息摘要或HMAC,并使用私钥加密.使用私钥进行签名的加密加密与将文档粘贴在保险箱中并将密钥留在周围的说法一样有意义,这是签署文档的替代方法.

是的,它是加密的,因为它的操作相同.私钥加密密文与公钥加密密文一样难以辨认; 一个人需要两个密钥才能解密密文.

有关RSA算法的参考,请参见http://fringe.davesource.com/Fringe/Crypt/RSA/Algorithm.html.

  • “是的,它正在加密,因为它的操作相同”。否,它不是加密,因为它是不相同的操作。模幂是相同的,但填充部分不同。没有公共库提供带有私钥的加密。我认为您正在做被别人指责的事情,这会使签名与加密混淆。 (4认同)

Ras*_*ber 6

使用私钥执行原始RSA操作通常称为解密操作(正如使用公钥执行它称为加密操作).

访问此操作很有用 - 例如,实现框架不支持的操作.

该操作存在:它是DecryptValue -method,由RSACryptoServiceProvider的基类定义:System.Security.Cryptography.RSA.不幸的是,RSACryptoServiceProvider不支持它(因为底层的win32-api,CryptoAPI不支持它).但是,如果您可以获得RSA类的另一个.NET实现,那么您将能够执行此操作.


blo*_*art 5

不,这不是任何公钥/私钥加密的工作原理。只能用公钥加密,也只能用私钥解密。

如果您想将私钥应用于消息,也许您正在寻找签名而不是加密?这是一种不同的加密方案,也可以使用 RSA 密钥。

  • 事实上,用私钥加密是有其用处的。您可以加密并发布某些内容,“公众”可以使用您的*公钥*密钥解密该消息,因此知道加密的文件来自您。它作为签名/身份验证的基本形式。旧的基于 dos 的 PGP 允许这样做。 (19认同)
  • 克雷格,你说的是签约,这是完全不同的事情。签名不是加密(尽管它是密码学)。即使如此,签名也只能使用私钥生成,但需要使用公钥进行检查。 (8认同)
  • @davidhood2 不,这个答案是正确的。当然可以使用私钥应用 RSA 求幂,但是这样您所做的并不是加密。 (5认同)
  • 澄清一下,如果您使用 RSA,从数学上讲,是的,您可以使用私钥进行加密,而私钥只能通过公钥进行解密。然而,就工作流程而言,这样做通常没有多大意义(除了在创建数字签名的特定用例中)。 (3认同)

Rem*_*anu 5

幸运的是没有。但是,您可以使用私钥签名,并使用公钥验证签名。

当逆转关键角色时(这就是签名的工作方式),涉及的数学是有意义的,而当解密密钥众所周知且公开时,进行隐私加密就没有多大意义。