代码之家  ›  专栏  ›  技术社区  ›  stovroz

简单使用rsacryptoseServiceProvider密钥密码失败

  •  2
  • stovroz  · 技术社区  · 16 年前

    我想用密码(不会)保护我的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:“指定的类型无效”。如果我把密码分配出去,它就可以工作了。

    我,或者微软,做错了什么?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Rasmus Faber    16 年前

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

    您可能想尝试设置

    prms.Flags = CspProviderFlags.UseUserProtectedKey;
    

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

    推荐文章