这个
blog
你曾经
显示以下图形以解释PKCS#7签名容器结构
但实际上,这只是PKCS#7定义的最简单的结构。如果你看看
SignerInfo
规格(
content - signerInfos - SignerInfo
),你会明白的
SignerInfo ::= SEQUENCE {
version Version,
issuerAndSerialNumber IssuerAndSerialNumber,
digestAlgorithm DigestAlgorithmIdentifier,
authenticatedAttributes
[0] IMPLICIT Attributes OPTIONAL,
digestEncryptionAlgorithm
DigestEncryptionAlgorithmIdentifier,
encryptedDigest EncryptedDigest,
unauthenticatedAttributes
[1] IMPLICIT Attributes OPTIONAL }
(
RFC 2315 section 9.2 "SignerInfo type"
)
特别是
authenticatedAttributes
你在上面的素描里找不到的。但在目前的签名资料中
(又名签名属性)实际上是必需的!
此外,如果有
在PKCS#7签名容器签名者信息对象中,加密摘要是
不
已验证的属性
结构。在这种情况下,文档数据的摘要存储为特定签名属性“messageDigest”属性的值。因此,在这种情况下,您尝试提取错误的值来比较文档摘要。
follow-up question
有
已验证的属性
,所以鼓舞人心的博客让你误入歧途。