RSACryptoServiceProvider Public/Private 密钥导入

RSACryptoServiceProvider Public/Private Keys Import

我想通过 RSACryptoServiceProvider

签署和验证数据

为此,我需要 Public 和私钥。

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

有一次,我生成了我的Public 和私钥

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>";
    }

在上面,我证明了 "Verify Data Via Public Keys"

我的 SignData 方法类似。

在那里,

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

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

İ我的解决方案错了吗?

第二个问题,

如果我用这个方法导入密钥

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

GetKeyFromContainer("MyKeyContainer");

MyKeyContainer 是私有的并且 public 密钥是静态的吗?

在每个 运行,我可以拥有相同的 私人 key/public 密钥

或者每个 运行ning 我有不同的键集?强调文本

Is My solution wrong?

这取决于您的要求和威胁模型。 RSACryptoServiceProvider 的签名生成应明确设置为除 MD5 或 SHA-1 之外的哈希。从你的问题中不清楚这是否发生了。

If I use this method to import keys

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

GetKeyFromContainer("MyKeyContainer");

Is MyKeyContainer private and public keys static?

是的,这就是使用密钥存储的一般想法。

At each run, Can I have same private key/public key? Or should I have different key set each time I generate a signature?

可以,前提是您使用的密钥大小足够大,比如 2048 位或更高。


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