【发布时间】:2019-08-06 07:07:30
【问题描述】:
我知道PKCS#7 = Certificate + Optional raw data + Signature in PKCS#1 format 我需要从 PKCS#7 签名中提取 PKCS#1,如何在 C# 中执行此操作。我可以使用充气城堡来做到这一点,这是我的实现
IE。将 PKCS#7 转换为 ASN.1 并采用最后一个序列,因为它是 PKCS#1
Asn1InputStream asn1 = new Asn1InputStream(pkcs7Stream);
Asn1Sequence sequence = (Asn1Sequence)asn1.ReadObject().ToAsn1Object();
var sequenceString = sequence.ToString();
var lastCommaIndex = sequenceString.LastIndexOf(",");
var pkcs1HexStr = sequenceString.Substring(lastCommaIndex + 3).Replace("]", string.Empty);
有没有其他优雅的方式来获取PKCS#1
【问题讨论】:
-
根据您的代码,以及您的分隔符“,”和“]”,您的输入似乎不是二进制 pkcs7,而是 pkcs7 的文本表示
-
来自 pkcs#7 流我将其转换为 ASN.1 序列并获取该序列的字符串形式并对其进行解析
-
我知道 PKCS#7 = 证书 + 可选原始数据 + PKCS#1 格式的签名... 抱歉,这是一种极端的过度简化,并不是特别有用。 PKCS #7 的最佳实施文档是CMS,这应该是所有讨论的共同参考。现在,我可以假设您有兴趣处理的数据是内容类型为signed data 的单一签名者吗?
标签: c# bouncycastle pkcs#7 pkcs#1