我正在尝试使用DSACryptoServiceProvider生成密钥对。
以下是代码:
var cspParameters = new CspParameters();
cspParameters.Flags = CspProviderFlags.CreateEphemeralKey;
cspParameters.KeyContainerName = Guid.NewGuid().ToString();
DSA dsa = new DSACryptoServiceProvider(2048, cspParameters); // Generate a new 2048 bit RSA key
string publicPrivateKeyXML = dsa.ToXmlString(true);
string publicOnlyKeyXML = dsa.ToXmlString(false);
在dsa.ToXmlString(true);
我遇到以下异常:指定无效标志。怎么了?
答案 0 :(得分:0)
最大密钥大小属性为1024,请参阅此文章:DSACryptoServiceProvider.KeySize Property
“此算法支持从512位到1024位的密钥长度,增量为64位。”
答案 1 :(得分:0)
问题1:您必须要求支持DH的加密容器。
问题2:密钥大小不得大于1024(Windows是哑的)。
var cspParameters = new CspParameters(13); // 13 = PROV_DSS_DH which is not exported
cspParameters.Flags = CspProviderFlags.CreateEphemeralKey;
DSA dsa = new DSACryptoServiceProvider(1024, cspParameters); // Generate a new 2048 bit RSA key
string publicPrivateKeyXML = dsa.ToXmlString(true);
string publicOnlyKeyXML = dsa.ToXmlString(false);
无论如何测试,你都会发现问题3:
问题3:DSACryptoProvider会悄悄忽略CreateEphemeralKey。
如果你想要一个有效的DSAManaged,请从Mono获得一份DSAManaged。
答案 2 :(得分:0)
这里有几个问题。
DSACng
不支持对DSA的FIPS-186-3更新。您需要使用DSA-1024或升级到.NET 4.6.2并使用CspParameters
,它支持FIPS-186-3(密钥大小增加,SHA-2(SHA256,SHA384,SHA512)哈希) ProviderType
对象的{
const int PROV_DSS_DH = 13;
var cspParameters = new CspParameters(PROV_DSS_DH);
DSA dsa = new DSACryptoServiceProvider(1024, cspParameters);
string publicPrivateKeyXML = dsa.ToXmlString(true);
string publicOnlyKeyXML = dsa.ToXmlString(false);
}
{
const int PROV_DSS_DH = 13;
var cspParameters = new CspParameters(PROV_DSS_DH);
cspParameters.Flags = CspProviderFlags.CreateEphemeralKey;
DSA dsa = new DSACryptoServiceProvider(1024, cspParameters);
string publicPrivateKeyXML = dsa.ToXmlString(true);
string publicOnlyKeyXML = dsa.ToXmlString(false);
}
{
DSA dsa = new DSACryptoServiceProvider(1024);
string publicPrivateKeyXML = dsa.ToXmlString(true);
string publicOnlyKeyXML = dsa.ToXmlString(false);
}
= 24,适用于RSA。您需要使用13,这适用于DSA。在wincrypt.h中,神奇的数字不那么神奇(PROV_RSA_AES = 24,PROV_DSS_DH = 13)。任何这些工作:
{{1}}