2009-12-16 2 views
2

Je veux protéger ma clé privée RSA avec un mot de passe (qui ne serait pas), mais ce qui suit C# échoue:utilisation simple de RSACryptoServiceProvider KeyPassword échoue

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); 

... avec le CryptographicException: « Type spécifié non valide ". Si je prends l'affectation KeyPassword, cela fonctionne très bien.

Que suis-je, ou Microsoft, en train de faire?

Répondre

1

La valeur CspParameters.KeyPassword équivaut à appeler CryptSetProvParam avec PP_KEYEXCHANGE_PIN (ou PP_SIGNATURE_PIN). Cet indicateur n'est pas pris en charge par le fournisseur de services de chiffrement Microsoft par défaut (il est destiné à être utilisé avec les fournisseurs de services de chiffrement à base de cartes à puce).

Vous pourriez vouloir essayer de régler

prms.Flags = CspProviderFlags.UseUserProtectedKey; 

ou encore la génération d'un non-persistant paire de clés, l'exportation et le chiffrement avec une clé dérivée d'un mot de passe vous-même.

Questions connexes