我使用以下命令创建了一个客户RSA密钥容器(用于加密web.config中的连接字符串):
aspnet_regiis -pc“TestKeys”-size 2048 -exp
然后我将密钥导出到xml文件并用它初始化RSACryptoServiceProvider的实例,以便我可以检查密钥大小肯定是2048.但是,使用下面的代码,密钥大小显示为1024。
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
using (FileStream fs = new FileStream(@"C:\TestKeys.xml", FileMode.Open))
{
using (StreamReader sr = new StreamReader(fs))
{
rsa.FromXmlString(sr.ReadToEnd());
}
}
Console.WriteLine(rsa.KeySize.ToString());
}
似乎aspnet_regiis忽略了-size参数。我错过了什么吗?
此外,是否建议使用RSA加密.Net配置部分的密钥大小?
答案 0 :(得分:2)
我最终使用RSACryptoServiceProvider类来创建密钥容器,因为它创建了指定大小的密钥。
CspParameters cp = new CspParameters();
cp.KeyContainerName = keyContainerName;
cp.Flags = CspProviderFlags.UseMachineKeyStore;
cp.KeyNumber = 1;
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(keySize, cp))
{
using (FileStream fs = new FileStream(fileName, FileMode.Create))
{
using (StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine(rsa.ToXmlString(true));
}
}
}
NIST推荐使用3072位的密钥大小,以确保2030年以后的安全性。