C# 使用sn.exe生成用于RSA加密的公钥/私钥对

C# 使用sn.exe生成用于RSA加密的公钥/私钥对,c#,visual-studio-2010,encryption,rsa,C#,Visual Studio 2010,Encryption,Rsa,任何人都认为使用sn.exe生成公钥/私钥对有什么不对,我可以在以后使用私钥加密数据,然后给人们公钥,让他们解密我的密文?我知道sn.exe用于强命名程序集,但由于它生成密钥对,我可以简单地使用此方案吗 我问这个问题是因为我知道RSA是用公钥加密的。但我有一个我认为是做相反事情的有效用例。这实际上是两个问题: 您是否应该使用sn.exe生成密钥对 您应该使用私钥加密数据吗 第一个问题的答案是:不,不是真的。exe的密钥对生成实际上只对非常小的开发环境有用,并且需要您处理所有安全性。有很多更好

任何人都认为使用sn.exe生成公钥/私钥对有什么不对,我可以在以后使用私钥加密数据,然后给人们公钥,让他们解密我的密文?我知道sn.exe用于强命名程序集,但由于它生成密钥对,我可以简单地使用此方案吗


我问这个问题是因为我知道RSA是用公钥加密的。但我有一个我认为是做相反事情的有效用例。

这实际上是两个问题:

  • 您是否应该使用sn.exe生成密钥对
  • 您应该使用私钥加密数据吗
第一个问题的答案是:不,不是真的。exe的密钥对生成实际上只对非常小的开发环境有用,并且需要您处理所有安全性。有很多更好的方法可以生成包含密码保护(PFX)等内容的证书容器。例如,看看MakeCert工具——它可以用来生成自签名的X.509证书,这些证书可以用于您可能想要执行的几乎所有加密操作

不幸的是,第二个问题的答案也是:不,不是真的。从加密的角度来看,用私钥加密没有多大意义;毕竟,公钥就是:public。如果任何人都能解密它(没有操作系统提供任何公钥保护,因此获取副本很简单),那么加密它就没有多大意义。如果目的是确保人们能够证明它来自您,那么数字签名是一种更好的方式,在这种情况下,您所描述的正是您想要做的:使用私钥对其进行签名,使用免费可用的公钥验证签名


现在,如果您的意图是有一种将加密数据分发给多个接收者的方法,请考虑使用PKCSα7/CMS信封。既然你说的是使用sn.exe,那说明你在使用.NET,所以你很幸运!EnvelopedCms类应该提供您需要的内容。您所需要的只是收件人X.509证书中的公钥(makecert to the rescue!)。MSDN有一个演练。

我认为使用openSsl更有意义-snk文件格式不像pem格式那样常见,而且在使用openSsl时,您将有更多的选项