2009-12-16 110 views
2

我要保護我的RSA私鑰用密碼(誰也不會),但下面的C#失敗:簡單使用的RSACryptoServiceProvider KeyPassword的失敗

SecureString pw = new SecureString(); 
pw.AppendChar('x'); 
CspParameters prms = new CspParameters(); 
prms.KeyPassword = pw; 
RSACryptoServiceProvider crypto = new RSACryptoServiceProvider(prms); 
byte[] encrypted = crypto.Encrypt(Encoding.ASCII.GetBytes("encryptme"), true); 

...與CryptographicException:「指定了無效的類型」。如果我將KeyPassword分配出來,它可以正常工作。

我或微軟在做什麼錯?

回答

1

設置CspParameters.KeyPassword相當於使用PP_KEYEXCHANGE_PIN(或PP_SIGNATURE_PIN)調用CryptSetProvParam。默認的Microsoft加密服務提供商不支持此標誌(它旨在用於基於智能卡的CSP)。

你可能想嘗試設置

prms.Flags = CspProviderFlags.UseUserProtectedKey; 

或交替產生的非持久性密鑰對,出口,並將其與密碼自己獲得的密鑰加密。