我试图使用.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()