在驗證PDF文件中的簽名時會出現問題。在標準中說:PKCS#7中的消息摘要過程(PDF中的簽名)
消息摘要計算過程的結果取決於signedAttrs字段是否存在。當該字段不存在時,結果就是如上所述的內容的消息摘要。然而,當字段存在時,結果是signedAttrs字段中包含的SignedAttrs值的完整DER編碼的消息摘要。
我解析簽名,並得到signedAttrs
:
[0](4 elem)
SEQUENCE(2 elem)
OBJECT IDENTIFIER1.2.840.113549.1.9.3 // ContentType
SET(1 elem)
OBJECT IDENTIFIER1.2.840.113549.1.7.1
SEQUENCE(2 elem)
OBJECT IDENTIFIER1.2.840.113549.1.9.5 // SigningTime
SET(1 elem)
UTCTime2014-04-13 02:58:41 UTC
SEQUENCE(2 elem)
OBJECT IDENTIFIER1.2.840.113549.1.9.4 // MessageDigest
SET(1 elem)
OCTET STRING(20 byte) 194E0BA9C4B9A53D5E9E5B7B94D7DB42BEA4C28F
SEQUENCE(2 elem)
OBJECT IDENTIFIER1.2.840.113549.1.9.15
SET(1 elem)
SEQUENCE(8 elem)
SEQUENCE(1 elem)
OBJECT IDENTIFIER2.16.840.1.101.3.4.1.42
SEQUENCE(1 elem)
OBJECT IDENTIFIER2.16.840.1.101.3.4.1.22
SEQUENCE(1 elem)
OBJECT IDENTIFIER2.16.840.1.101.3.4.1.2
SEQUENCE(1 elem)
OBJECT IDENTIFIER1.2.840.113549.3.7
SEQUENCE(2 elem)
OBJECT IDENTIFIER1.2.840.113549.3.2
INTEGER128
SEQUENCE(2 elem)
OBJECT IDENTIFIER1.2.840.113549.3.2
INTEGER64
SEQUENCE(1 elem)
OBJECT IDENTIFIER1.3.14.3.2.7
SEQUENCE(2 elem)
OBJECT IDENTIFIER1.2.840.113549.3.2
INTEGER40
和DER編碼:
A081D8301806092A864886F70D010903310B06092A864886F70D010701301C06092A864886F70D010905310F170D3134303431333032353834315A302306092A864886F70D01090431160414194E0BA9C4B9A53D5E9E5B7B94D7DB42BEA4C28F307906092A864886F70D01090F316C306A300B060960864801650304012A300B0609608648016503040116300B0609608648016503040102300A06082A864886F70D0307300E06082A864886F7 0D030202020080300D06082A864886F70D0302020140300706052B0E030207300D06082A864886F70D0302020128
我計算出其消化,並與加密的摘要的解密的結果。但它失敗了。
我應該計算整個signedAttrs
字段或某些屬性或其他任何東西的摘要?
編輯: 這是PDF file我想驗證
感謝您的回答。我不明白什麼是完整的DER編碼?你可以給我一個例子嗎? – xuanhai266
簽名屬性包含在帶有IMPLICIT [0]標籤(編碼爲0xA0)的PKCS#7容器中。這意味着這個標籤*代替了'SET OF'標籤(編碼爲0x31),它將'SignedAttributes'定義爲它的外部初始標籤。對於*完整的DER編碼*,您必須將其恢復,即將0xA0再次替換爲0x31。 – mkl
因此,在這種情況下,完整的DER編碼爲: '3181d8301806092a864886f70d010903310b06092a864886f70d010701301c06092a864886f70d010905310f170d3134303431333032353834315a302306092a864886f70d01090431160414194e0ba9c4b9a53d5e9e5b7b94d7db42bea4c28f307906092a864886f70d01090f316c306a300b060960864801650304012a300b0609608648016503040116300b0609608648016503040102300a06082a864886f70d0307300e06082a864886f70d030202020080300d06082a864886f70d0302020140300706052b0e030207300d06082a864886f70d0302020128' 我會計算消化它? – xuanhai266