如何使用python从pdf提取数字签名?

时间:2020-02-06 06:29:38

标签: python

我正在使用python 3.7,我想从发票(pdf)中提取数字签名,然后验证数字签名。我该怎么办...请帮助 我对这种数字签名提取一无所知,需要从头开始。

谢谢

1 个答案:

答案 0 :(得分:1)

让我们从 DSA 是什么开始,以及它与 MAC 哈希的区别。 数字签名算法提供完整性,身份验证和不可否认性,而 Message Authentication Code 提供完整性和身份验证,而 hash 仅提供诚信

由于您是从头开始的,因此我将提供一些非正式的定义:
完整性-当您可以肯定地说没有任何修改时,可以确保完整性。
身份验证-当您可以验证数据来自预期来源时,可以确保身份验证。例如我可以证明汤姆给我发送了PDF。
不可否认-当仅给定数据和相关信息(通常为公共密钥)的第三方可以验证数据的完整性和身份验证时,可确保不可否认。例如John可以验证我是否已向您发送了pdf。

因此,根据您需要的算法类型,以下是一些示例:

哈希

import hashlib
print(hashlib.sha256(open('file.pdf', 'r').read().encode()).hexdigest())


MAC -HMAC,键控哈希

import hashlib, hmac
print(hmac.digest(b"key", b"message", digest=hashlib.sha256))


DSA -使用cryptography包 取自here

>>> from cryptography.hazmat.backends import default_backend
>>> from cryptography.hazmat.primitives import hashes
>>> from cryptography.hazmat.primitives.asymmetric import dsa
>>> private_key = dsa.generate_private_key(
...     key_size=1024,
...     backend=default_backend()
... )
>>> data = b"this is some data I'd like to sign"
>>> signature = private_key.sign(
...     data,
...     hashes.SHA256()
... )

相关问题