解码RSACryptoServiceProvider的密钥



我试图使用.ExportRSAPrivateKey()RSACryptoServiceProvider对象中提取私钥。根据MSDN,它导出一个包含该密钥的pkcs# 1 rsprivatekey表示的字节数组,该表示在RFC8017的附录a中定义。因此,基于此,我假设它应该是asn1编码的,并尝试使用AsnReader类:

using (var rsa = new RSACryptoServiceProvider(1024))
{
var priv = rsa.ExportRSAPrivateKey();
var asnr = new AsnReader(priv, AsnEncodingRules.DER);
var N = asnr.ReadInteger();
}

但是,此代码在.ReadInteger()上失败,除了:"The provided data is tagged with 'Universal' class value '16', but it should have been 'Universal' class value '2'."

我做错了什么?

这是因为RSAPublicKey是一个SEQUENCE…

你必须读取一个序列然后,整数。

我猜你正在使用Microsoft AsnReader类

所以,代码可以是这样的:
var publicKey = asnr.ReadSequence()
var N = publickKey.ReadInteger()

相关内容

  • 没有找到相关文章

最新更新