我想用密码(不会)保护我的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:“指定的类型无效”。如果我把密码分配出去,它就可以工作了。
我,或者微软,做错了什么?
设置 CspParameters.KeyPassword 等于调用 CryptSetProvParam 具有 PP_KEYEXCHANGE_PIN (或) PP_SIGNATURE_PIN )默认的Microsoft加密服务提供程序不支持此标志(它用于基于智能卡的CSP)。
CspParameters.KeyPassword
CryptSetProvParam
PP_KEYEXCHANGE_PIN
PP_SIGNATURE_PIN
您可能想尝试设置
prms.Flags = CspProviderFlags.UseUserProtectedKey;
或者生成一个非持久密钥对,将其导出并用从密码派生的密钥对其进行加密。