RSACryptoServiceProvider公钥/私钥导入

时间:2016-12-12 13:57:02

标签: c# .net rsa public-key-encryption private-key

我想通过 RSACryptoServiceProvider

来签名和验证数据

为此,我需要公钥和私钥。

在我的项目中,我将MyPublic和私钥存储在XML文件中。

有一次,我生成了MyPublic和私钥

public bool SignutureCheckForVerify(string myData, byte[] SignedData)
    {
        ...

        RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider();
             RSAalg.FromXmlString(MyPublicKey());
        return RSAalg.VerifyData(Encoding.ASCII.GetBytes(myData), new   MineCryptoService(), SignedData);

       ...

    }

    private static string MyPublicKey()
    {
        return "<RSAKeyValue><Modulus>-----Pubic Key Here ----</RSAKeyValue>";
    }

在上面,我展示了“通过公钥验证数据”

我的SignData方法类似。

在那里,

  RSAalg.FromXmlString(GetPrivateKey());
   ...
  RSAalg.SignData(...)

我的问题是;在某些例子中,我认识到了这一点;公钥和私钥通过crt / pem / cert等证书文件导入。在那里我存储在XML文件中。

我的解决方案错了吗?

第二个问题,

如果我使用此方法导入密钥

https://msdn.microsoft.com/en-us/library/tswxhw92(v=vs.110).aspx

GetKeyFromContainer( “MyKeyContainer”);

IS MyKeyContainer私钥和公钥是否静态?

每次运行时,我可以使用相同的私钥/公钥

或每次运行我都有不同的密钥集?强调文本

1 个答案:

答案 0 :(得分:0)

  

我的解决方案是错误的吗?

这取决于您的要求和威胁模型。应将RSACryptoServiceProvider的签名生成显式设置为除MD5或SHA-1之外的哈希。如果发生这种情况,你的问题就不清楚了。

  

如果我使用此方法导入密钥

     

https://msdn.microsoft.com/en-us/library/tswxhw92(v=vs.110).aspx

     

GetKeyFromContainer("MyKeyContainer");

     

MyKeyContainer私钥和公钥是静态的吗?

是的,无论如何,这是使用密钥存储区的一般想法。

  

每次运行时,我可以拥有相同的私钥/公钥吗?或者每次生成签名时我是否应该设置不同的密钥?

是的,你可以,因为你使用了足够的密钥大小,比如2048位或更高。

实际上,为了使您的解决方案安全,接收方需要信任公钥。如果没有建立信任,任何人都可以向他们发送他们的公钥。