2017-06-14 160 views
2

我想在一個密鑰容器中存儲一個私鑰來爲一個asp.net網站的數據創建一個簽名。如何將私鑰存儲在密鑰容器中?

指定的加密服務提供商(CSP)不支持此密鑰算法:

//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);線有以下錯誤。

我已經使用這種方法存儲RsaCryptoServiceProvider密鑰沒有任何問題。但是,當我想將其用於DSA時,它不起作用。

回答

2

如果我看一看默認的CspParameters(無參數)構造函數,然後I get this text

CspParameters這種形式的初始化ProviderType領域的的值,它指定PROV_RSA_AES提供商。此默認提供程序與Aes算法兼容。

如果我仰望接受一個32位整數I get構造:

初始化CspParameters類指定供應商類型代碼的新實例。

...

要指定與DSA算法兼容的供應商中,的值傳遞給dwTypeIn參數。

所以在我看來,這可以通過使用正確的代碼調用CspParameters的正確構造函數來解決。

+0

嘿,感謝恩惠,感激不盡。 8更多upvotes,我會[在加密標籤之上](https://stackoverflow.com/tags/encryption/topusers):) –

1

@MaartenBodewes提到的標準是正確的。默認情況下,CspParameters被配置爲RSA容器。這就是爲什麼當用RSACryptoServiceProvider進行相同嘗試時沒有錯誤。

CspParameters csp = new CspParameters(); 

是一樣的:

CspParameters csp = new CspParameters(1); 

DSACryptoServiceProvider使用加密服務,該參數的構造函數來調用:

CspParameters csp = new CspParameters(13); 
相關問題