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

在iText 8(C#)中读取TimeStampToken遇ASN1结构转换问题求助

解决iText 8(C#)中TimeStampToken转ContentInfo的类型转换异常问题

你的问题出在重复序列化/反序列化ASN1结构以及可能的OID误用,导致ContentInfo构造时类型不匹配。以下是修正方案:

问题根源

  1. 无需将TimeStampTokenInfo的ASN1结构先转成字节数组再重新解析,这一步完全多余,还会引入类型匹配风险。
  2. ContentInfo构造函数接受Asn1Encodable类型参数,而TimeStampTokenInfo.ToASN1Primitive()直接返回符合要求的Asn1Primitive(继承自Asn1Encodable),可直接使用。
  3. 若要封装TimeStampTokenInfo本身,应使用对应OID(PkcsObjectIdentifiers.IdCtTstInfo),而非IdAAEtsContentTimestamp(后者用于Ets内容时间戳属性场景)。

修正后的代码

// 获取TimeStampTokenInfo
TimeStampTokenInfo tstInfo = pkcs7.GetTimeStampTokenInfo();
// 直接获取其ASN1原始结构,无需额外序列化/反序列化
Asn1Primitive tstAsn1 = tstInfo.ToASN1Primitive();
// 创建ContentInfo,根据场景选择正确OID
// 场景1:封装TimeStampTokenInfo本身
ContentInfo contentInfo = new ContentInfo(PkcsObjectIdentifiers.IdCtTstInfo, tstAsn1);

// 若场景为Ets内容时间戳属性,保留原OID:
// ContentInfo contentInfo = new ContentInfo(PkcsObjectIdentifiers.IdAAEtsContentTimestamp, tstAsn1);

原代码异常原因

原代码中Asn1Object.FromByteArray()解析后的对象类型,与ContentInfo构造函数期望的ASN1结构类型不匹配,加上重复序列化反序列化过程可能破坏原始结构的类型信息,最终触发强制转换异常。直接使用ToASN1Primitive()返回的对象可避免该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:27:29