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相当于CryptSetProvParamPP_KEYEXCHANGE_PIN(或PP_SIGNATURE_PIN)调用。默认 Microsoft 加密服务提供程序不支持此标志(它旨在与基于智能卡的 CSP 一起使用)。

您可能想尝试设置

prms.Flags = CspProviderFlags.UseUserProtectedKey;

或者生成一个非持久密钥对,将其导出并使用您自己的密码派生的密钥对其进行加密。

于 2009-12-16T19:48:38.637 回答