我想通过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");
MyKeyContainer私钥和公钥是静态的吗?
每次运行时,我是否可以拥有相同的私钥/公钥?
或者每次运行我都有不同的键集?强调文本。
发布于 2016-12-12 18:17:33
我的解决方案错了吗?
这取决于您的需求和威胁模型。RSACryptoServiceProvider的签名生成应该显式地设置为MD5或SHA-1以外的散列。从你的问题上还不清楚这是否发生了。
如果我使用此方法导入键 https://msdn.microsoft.com/en-us/library/tswxhw92(v=vs.110).aspx
GetKeyFromContainer("MyKeyContainer");MyKeyContainer私钥和公钥是静态的吗?
是的,不管怎么说,这都是使用钥匙商店的一般想法。
每次运行时,我能拥有相同的私钥/公钥吗?或者每次生成签名时应该有不同的密钥集?
是的,您可以,考虑到您使用一个充足的密钥大小,例如2048位或更高。
实际上,为了您的解决方案是安全的,接收方需要信任公钥。当没有建立信任时,任何人都可以向您发送他们的公钥。
https://stackoverflow.com/questions/41102504
复制相似问题