我想用密码(不会)保护我的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分配工作正常。

我或Microsoft在做什么错?

最佳答案

设置CspParameters.KeyPassword等效于用CryptSetProvParam(或PP_KEYEXCHANGE_PIN)调用PP_SIGNATURE_PIN。默认的Microsoft crypto-service-provider不支持此标志(该标志与基于智能卡的CSP一起使用)。

您可能要尝试设置

prms.Flags = CspProviderFlags.UseUserProtectedKey;


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

09-07 00:52