我想将私钥存储在密钥容器中,以便为 asp.net 网站创建数据签名。
//First I Read PrivateKey from text file that i Uploaded with FileUpload(fuPrivateKey)
var pk = Encoding.UTF8.GetString(fuPrivateKey.FileBytes);
CspParameters csp = new CspParameters();
csp.KeyContainerName = "PrivateKeyForSignature";
DSACryptoServiceProvider rsa = new DSACryptoServiceProvider(csp);//error
rsa.FromXmlString(pk);
但我在DSACryptoServiceProvider rsa = new DSACryptoServiceProvider(csp);
行收到以下错误:
指定的加密服务提供程序 (CSP( 不支持此密钥算法。
我已经使用这种方法来存储RsaCryptoServiceProvider
密钥,没有任何问题。但是,当我想将其用于DSA时,它不起作用。
如果我看一下CspParameters
的默认(无参数(构造函数,那么我会得到以下文本:
这种形式的 CspParameters 将 ProviderType 字段初始化为值 24,该值指定PROV_RSA_AES提供程序。 此默认提供程序与 Aes 算法兼容。
如果我查找接受 32 位整数的构造函数,我会得到:
使用指定的提供程序类型代码初始化
CspParameters
类的新实例。。
若要指定与 DSA 算法兼容的提供程序,请将值 13传递给 dwTypeIn 参数。
所以在我看来,这可以通过使用正确的代码调用正确的CspParameters
构造函数来解决。
@MaartenBodewes提到的标准是正确的。 默认情况下,CspParameters
配置为 RSA 容器。这就是为什么,当用RSACryptoServiceProvider
尝试相同的方法时没有错误。
CspParameters csp = new CspParameters();
与:
CspParameters csp = new CspParameters(1);
要在DSACryptoServiceProvider
中使用加密服务,参数化构造函数必须调用为:
CspParameters csp = new CspParameters(13);