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

使用.NET SignedCms为已有哈希生成CMS格式签名的参数配置问题

1. contentType的OID值配置

你需要传入PKCS#7规范定义的通用数据类型OID:1.2.840.113549.1.7.1,这个OID对应id-data类型,适合承载任意二进制内容,你这里的SHA1/SHA256哈希字节可以直接用这个类型封装。

2. detached参数是否必须设为true

不是强制要求,该参数的作用是控制签名结构是否嵌入原始内容:

  • 设为true:生成分离式签名,最终输出的签名数据不包含你传入的哈希字节,后续验证签名时需要额外提供原始哈希值才能完成校验
  • 设为false:生成封装式签名,哈希字节会被嵌入到签名结构中,后续验证时无需额外提供原始内容,可直接从签名结构中读取
    你可以根据自己的业务场景选择即可。

修正后的代码示例

// 配置为id-data对应的OID
var contentType = new Oid("1.2.840.113549.1.7.1"); 
var content = Convert.FromBase64String(hash); // 支持SHA1或SHA256哈希字节
var contentInfo = new ContentInfo(contentType, content);
// 根据需求选择detached参数值,示例用分离签名
var signedCms = new SignedCms(contentInfo, detached: true); 

var signer = new CmsSigner(certificate);
signedCms.ComputeSignature(signer);

var signature = signedCms.Encode();

额外注意事项

如果你的需求是直接对现有哈希做签名、避免SignedCms对传入的哈希字节二次计算哈希,可以在初始化CmsSigner时显式指定哈希算法,配合对应重载跳过内容哈希步骤,你当前的写法如果是把哈希本身当作待签名的内容,不需要做额外调整。

内容的提问来源于stack exchange,提问作者D.R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:36:05