You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从RSACryptoServiceProvider导出私钥后调用AsnReader.ReadInteger报错如何解决

错误原因

你报错的核心原因是对PKCS#1 RSAPrivateKey的ASN.1结构层级理解有误:

  • 你拿到的导出内容的最外层ASN.1节点是SEQUENCE类型(对应Universal类值16),而你直接调用ReadInteger()方法期望读取INTEGER类型(对应Universal类值2),节点类型不匹配因此抛出异常。

PKCS#1定义的RSAPrivateKey结构层级如下:

RSAPrivateKey ::= SEQUENCE {
    version           Version,
    modulus           INTEGER,  -- n
    publicExponent    INTEGER,  -- e
    privateExponent   INTEGER,  -- d
    prime1            INTEGER,  -- p
    prime2            INTEGER,  -- q
    exponent1         INTEGER,  -- d mod (p-1)
    exponent2         INTEGER,  -- d mod (q-1)
    coefficient       INTEGER,  -- (inverse of q) mod p
    otherPrimeInfos   OtherPrimeInfos OPTIONAL
}

修正后的代码

你需要先读取最外层的SEQUENCE节点,再从内部读取对应的整数字段:

using (var rsa = new RSACryptoServiceProvider(1024))
{
    var priv = rsa.ExportRSAPrivateKey();
    var asnr = new AsnReader(priv, AsnEncodingRules.DER);
    // 先读取最外层SEQUENCE
    var seqReader = asnr.ReadSequence();
    // 读取版本字段
    var version = seqReader.ReadInteger();
    // 再读取模数N
    var N = seqReader.ReadInteger();
}

内容的提问来源于stack exchange,提问作者bazzilic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:51:03