如何在密钥容器中存储私钥



我想将私钥存储在密钥容器中,以便为 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);

最新更新