如何将私钥存储在Key Container中?
How to store private key in Key Container?
我想将私钥存储在密钥容器中,以便为 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);
行收到以下错误:
The specified cryptographic service provider (CSP) does not support this key algorithm.
我已经使用这种方法存储 RsaCryptoServiceProvider
密钥,没有任何问题。但是,当我想将它用于 DSA 时,它不起作用。
如果我看一下 CspParameters
的默认(无参数)构造函数,那么 I get this text:
This form of CspParameters initializes the ProviderType field to a value of 24, which specifies the PROV_RSA_AES provider. This default provider is compatible with the Aes algorithm.
如果我查找接受 32 位整数的构造函数 I get:
Initializes a new instance of the CspParameters
class with the specified provider type code.
...
To specify a provider compatible with the DSA algorithm, pass a value of 13to the dwTypeIn parameter.
所以在我看来,这可以通过使用正确的代码调用 CspParameters
的正确构造函数来解决。
@MaartenBodewes 提到的标准是正确的。 CspParameters
默认配置为 RSA 容器。这就是为什么用 RSACryptoServiceProvider
.
尝试相同时没有错误的原因
CspParameters csp = new CspParameters();
等同于:
CspParameters csp = new CspParameters(1);
要在 DSACryptoServiceProvider
中使用加密服务,必须调用参数化构造函数:
CspParameters csp = new CspParameters(13);
我想将私钥存储在密钥容器中,以便为 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);
行收到以下错误:
The specified cryptographic service provider (CSP) does not support this key algorithm.
我已经使用这种方法存储 RsaCryptoServiceProvider
密钥,没有任何问题。但是,当我想将它用于 DSA 时,它不起作用。
如果我看一下 CspParameters
的默认(无参数)构造函数,那么 I get this text:
This form of CspParameters initializes the ProviderType field to a value of 24, which specifies the PROV_RSA_AES provider. This default provider is compatible with the Aes algorithm.
如果我查找接受 32 位整数的构造函数 I get:
Initializes a new instance of the
CspParameters
class with the specified provider type code....
To specify a provider compatible with the DSA algorithm, pass a value of 13to the dwTypeIn parameter.
所以在我看来,这可以通过使用正确的代码调用 CspParameters
的正确构造函数来解决。
@MaartenBodewes 提到的标准是正确的。 CspParameters
默认配置为 RSA 容器。这就是为什么用 RSACryptoServiceProvider
.
CspParameters csp = new CspParameters();
等同于:
CspParameters csp = new CspParameters(1);
要在 DSACryptoServiceProvider
中使用加密服务,必须调用参数化构造函数:
CspParameters csp = new CspParameters(13);