0

我的系统中有很多 pdf。我需要检查所有这些文件是否是:-

  • 数字签名
  • 它们的完整性得到维护(通过将文件内容的哈希值与嵌入在 /Contents 中的消息摘要进行比较签名词典。。

我正在使用 python 来做到这一点。到目前为止,我已经能够/Content使用 PyPDF2 从签名字典中获取。内容是 pkcs7--der 编码的。有没有办法可以提取签名的消息摘要?

C这个答案中进行了类似的操作

4

2 回答 2

1

DER是二进制格式,其结构称为ASN.1。PEM 格式是 Base64 编码的 DER。

这个在线 PEM 解码器非常有用:http ://lapo.it/asn1js/识别其中的消息签名后,您可以编写代码以通过任何 ASN.1 库提取它。

于 2015-02-05T13:25:36.857 回答
0

CADESCMSPKCS#7 1.5签名的SignedData子类型具有此处定义的SignerInfo块的集合,基本上包含:

  • SignerIdentifier:证书集合的密钥
  • DigestAlgorithmIdentifier:使用哪种算法计算消息摘要
  • SignedAttributes(可选):密封数据:
  • SignatureAlgorithmIdentifier:使用哪种算法来计算签名(通过 SignedAttributes)
  • SignatureValue:签名值
  • 无符号属性(可选)

根据签名的类型,SignedAttributes 可能包含:

  • ContentType:签名内容的类型
  • 信息摘要
  • 签约时间
  • 会签

如果我们只使用找到的第一个签名并使用pyx509分支来简化它,这可能是某种类型的代码(未经测试):

from pyx509.models import PKCS7
pkcs7 = PKCS7.from_der(here_goes_your_pks7_signature_data_der_encoded)
signer_info = pkcs7.content.signerInfos[0]
auth_attrs = signer_info.auth_attributes
for attr in auth_attrs.attributes:
    if attr.type == '1.2.840.113549.1.9.4':  # Message Digest OID
        message_digest = attr.value
        print "Digest: %s#%s" % (signer_info.oid2name(signer_info.digest_algorithm), messageDigest)
 
于 2015-09-22T01:17:04.993 回答