我想用密码(谁不会)保护我的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分配出来,它可以正常工作。
我或微软做错了什么?
答案 0 :(得分:1)
设置CspParameters.KeyPassword
相当于使用CryptSetProvParam
(或PP_KEYEXCHANGE_PIN
)来调用PP_SIGNATURE_PIN
。默认的Microsoft加密服务提供程序不支持此标志(它适用于基于智能卡的CSP)。
您可能想尝试设置
prms.Flags = CspProviderFlags.UseUserProtectedKey;
或者生成非持久性密钥对,导出它并使用自己从密码派生的密钥对其进行加密。