【问题标题】:Simple use of RSACryptoServiceProvider KeyPassword fails简单使用 RSACryptoServiceProvider KeyPassword 失败
【发布时间】:2023-03-22 23:51:01
【问题描述】:

我想用密码保护我的 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 分配,它工作正常。

我或微软做错了什么?

【问题讨论】:

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


    【解决方案1】:

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

    您可能想尝试设置

    prms.Flags = CspProviderFlags.UseUserProtectedKey;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 2018-08-06
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多