【问题标题】:How Can I Set RSAParameters (of RSACryptoServiceProvider) to an RSA Public Key Directly如何将(RSACryptoServiceProvider 的)RSAParameters 直接设置为 RSA 公钥
【发布时间】:2018-08-01 07:13:21
【问题描述】:

创建必要的验证参数以便调用 JwtSecurityTokenHandler ValidateToken()...

我知道我可以做到:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(new RSAParameters() 
    {                
        Modulus = "",
        Exponent = ""
    });

var validationParameters = new TokenValidationParameters
    {
        IssuerSigningKey = new RsaSecurityKey(rsa)
    };

我想直接设置公钥,而不是单独设置模数和指数。如何做到这一点?

【问题讨论】:

  • 你的意思是“来自文件的内容”吗?还是只是“用更少的代码行”?
  • 我的意思是“代码行数更少”。我将拥有字符串形式的公钥(临时硬编码以使事情在本地工作)。我只是不想将密钥分解为模数和指数才能使用它。

标签: c# jwt rsa


【解决方案1】:

如果您保存的密钥看起来像 xmldsig RSAKeyValue (<RSAKeyValue><Modulus>base64</Modulus><Exponent>base64</Exponent></RSAKeyValue>),并且您不在 .NET Core 上,则可以使用 rsa.FromXmlString(keyString)

如果您保存的密钥格式更改为 CAPI blob 的 byte[] 表示,那么您可以使用 rsa.ImportCspBlob(keyBlob)

如果您保存的密钥格式更改为 CNG blob 的 byte[] 表示,那么您可以使用 new RSACng(CngKey.Import(blob, blobType))

否则,您可以拥有最少的代码,并考虑以下几点:

  • 您可以创建一个函数来根据您的存储格式构建 RSAParameters。
  • 将本地存储格式更改为两个数组。
  • 将硬编码格式更改为 RSAParameters 对象初始化器,您可以从中多次导入...

【讨论】:

  • 我不在 .NET Core 上。看起来 rsa.FromXmlString(keyString) 正是我一直在寻找的。另外,我会认真考虑你提到的想法。我非常感谢您的回复。这为我节省了很多时间,也为我带来了很多启示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
  • 2013-07-31
  • 2011-05-11
  • 2015-01-21
  • 2021-09-16
  • 2014-11-27
相关资源
最近更新 更多