使用PHP从PDF中提取签名


Signature extraction from PDF using PHP

假设我有一个数字签名的PDF文档(填写表单)。我需要找到一种使用PHP验证PDF文件的方法。

我知道我必须使用函数openssl_verify($data, $signature, $pub_key_id)。我需要3个参数(我有公共证书)。

如何从PDF文件中提取签名数据和签名本身?

您需要解析PDF-理论上,您可以编写自己的解析函数。然而,使用现成的东西会节省很多时间。

Apache的PDFBox呢?您可以将它作为任何其他shell脚本来执行,或者使用一些PHP/Java桥。

如果您决定采用手动方式,请参阅PDF规范以了解实现解析器的方法——您应该能够忽略任何复杂的部分,并通过查找startxref来找出签名。

还有一些专有的解决方案,如VersyPDF.HP,但这些解决方案对你的工作来说可能有点过头了(但从好的方面来说,你可以使用评估版本,因为你不在乎带水印的输出)。

要提取数据和签名,可以在PDF的/ByteRange字段中使用数字。它有4个数字作为/ByteRange[a b c d]。签名是从b(第h)字节到c(第th)字节,剩下的是数据。在PHP中,可以使用stream_get_contents()函数按流获取内容。