C# RSACryptServiceProvider公钥/私钥导入
我想通过RSACryptServiceProvider对数据进行签名和验证 为此,我需要公钥和私钥 在我的项目中,我将公钥和私钥存储在XML文件中 有一次,我生成了我的公钥和私钥C# RSACryptServiceProvider公钥/私钥导入,c#,.net,rsa,public-key-encryption,private-key,C#,.net,Rsa,Public Key Encryption,Private Key,我想通过RSACryptServiceProvider对数据进行签名和验证 为此,我需要公钥和私钥 在我的项目中,我将公钥和私钥存储在XML文件中 有一次,我生成了我的公钥和私钥 public bool SignutureCheckForVerify(string myData, byte[] SignedData) { ... RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(
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>";
}
我的问题是;在某个例子中,我认识到了这一点;通过crt/pem/cert等证书文件导入公钥和私钥。在那里,我存储在XML文件中
我的解决方案错了吗
第二个问题是
如果使用此方法导入密钥
GetKeyFromContainer(“MyKeyContainer”)
MyKeyContainer的私钥和公钥是静态的吗
每次运行时,我是否可以拥有相同的私钥/公钥
或者每次跑步我都有不同的按键设置?强调文字
我的解决方案错了吗
这取决于您的需求和威胁模型。rsacyptoserviceprovider
的签名生成应显式设置为MD5或SHA-1以外的散列。你的问题不清楚这是否发生过
如果使用此方法导入密钥
GetKeyFromContainer(“MyKeyContainer”)代码>
MyKeyContainer的私钥和公钥是静态的吗
是的,这就是使用密钥存储的一般想法
每次运行时,我是否可以拥有相同的私钥/公钥?还是每次生成签名时都应该设置不同的密钥
是的,您可以,因为您使用了足够的密钥大小,比如2048位或更高
实际上,要使解决方案安全,接收方需要信任公钥。当没有建立信任时,任何人都可以向您发送他们的公钥
我的解决方案错了吗
这取决于您的需求和威胁模型。rsacyptoserviceprovider
的签名生成应显式设置为MD5或SHA-1以外的散列。你的问题不清楚这是否发生过
如果使用此方法导入密钥
GetKeyFromContainer(“MyKeyContainer”)代码>
MyKeyContainer的私钥和公钥是静态的吗
是的,这就是使用密钥存储的一般想法
每次运行时,我是否可以拥有相同的私钥/公钥?还是每次生成签名时都应该设置不同的密钥
是的,您可以,因为您使用了足够的密钥大小,比如2048位或更高
实际上,要使解决方案安全,接收方需要信任公钥。当不建立信任时,任何人都可以将他们的公钥发送给您。对于您的答案,我想了很多,那么如何在XML文件中存储密钥呢。XML中的Storege与证书文件中的Storege有什么区别。你能帮我吗?XML是微软专有的存储工具。在证书中存储公钥允许您在证书中存储其他数据。证书可以使用私钥“自签名”,也可以由证书颁发机构(如果是PGP,则为“任何人”)签名,从而允许您创建PKI。请注意,“密钥管理”这个主题非常重要。讨论所有选项和特定选项的含义超出了StackOverflow的范围。@MaartenBodewes RSACryptoServiceProvider需要算法作为参数,默认为SHA-1是什么意思?(它只支持OAEP的SHA-1,但这是加密,不是签名。)@bartonjs Right。它是通过调用SignatureAlgorithm
返回的属性值。但是在上面的问题中,hash method参数被new MineCryptoService()
替换,这让我很困惑,不管是什么。对于您的答案,我想了很多,那么如何在XML文件中存储密钥呢。XML中的Storege与证书文件中的Storege有什么区别。你能帮我吗?XML是微软专有的存储工具。在证书中存储公钥允许您在证书中存储其他数据。证书可以使用私钥“自签名”,也可以由证书颁发机构(如果是PGP,则为“任何人”)签名,从而允许您创建PKI。请注意,“密钥管理”这个主题非常重要。讨论所有选项和特定选项的含义超出了StackOverflow的范围。@MaartenBodewes RSACryptoServiceProvider需要算法作为参数,默认为SHA-1是什么意思?(它只支持OAEP的SHA-1,但这是加密,不是签名。)@bartonjs Right。它是通过调用SignatureAlgorithm
返回的属性值。但在上面的问题中,hash方法参数被new MineCryptoService()
替换,无论是什么,我都感到困惑。
RSAalg.FromXmlString(GetPrivateKey());
...
RSAalg.SignData(...)