2

パスワードで RSA 秘密鍵を保護したいのですが (そうしない人はいません)、次の C# は失敗します。

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 の割り当てを取り除くと、正常に動作します。

私、またはマイクロソフトは何を間違っていますか?

4

1 に答える 1

1

設定は(または) でCspParameters.KeyPassword呼び出すことと同じCryptSetProvParamです。このフラグは、既定の Microsoft crypto-service-provider ではサポートされていません (スマートカード ベースの CSP で使用するためのものです)。PP_KEYEXCHANGE_PINPP_SIGNATURE_PIN

設定してみるといいかもしれません

prms.Flags = CspProviderFlags.UseUserProtectedKey;

または、代わりに非永続的なキーペアを生成し、それをエクスポートして、パスワードから派生したキーで暗号化します。

于 2009-12-16T19:48:38.637 に答える