简单使用RSACryptoServiceProvider KeyPassword失败

时间:2009-12-16 16:21:36

标签: c# .net encryption rsa public-key

我想用密码(谁不会)保护我的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分配出来,它可以正常工作。

我或微软做错了什么?

1 个答案:

答案 0 :(得分:1)

设置CspParameters.KeyPassword相当于使用CryptSetProvParam(或PP_KEYEXCHANGE_PIN)来调用PP_SIGNATURE_PIN。默认的Microsoft加密服务提供程序不支持此标志(它适用于基于智能卡的CSP)。

您可能想尝试设置

prms.Flags = CspProviderFlags.UseUserProtectedKey;

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