假设我有一个数字签名的 PDF 文档(已填写表格)。我需要找到一种使用 PHP 验证 PDF 文件的方法。
我知道我必须使用 function openssl_verify($data, $signature, $pub_key_id)
。我需要 3 个参数(我有公共证书)。
如何从 PDF 文件中提取签名数据和签名本身?
假设我有一个数字签名的 PDF 文档(已填写表格)。我需要找到一种使用 PHP 验证 PDF 文件的方法。
我知道我必须使用 function openssl_verify($data, $signature, $pub_key_id)
。我需要 3 个参数(我有公共证书)。
如何从 PDF 文件中提取签名数据和签名本身?
您需要解析 PDF - 理论上,您可以编写自己的解析函数。但是,使用现成的东西可以节省大量时间。
Apache 的 PDFBox怎么样?您可以像任何其他 shell 脚本一样执行它,或者使用一些PHP/Java 桥接器。
如果您决定采用手动方式,请参阅PDF 规范以了解实现解析器的方法 - 您应该能够忽略任何复杂的部分并通过查找 startxref 来找出签名。
还有像VersyPDF.PHP这样的专有解决方案,但这些对你的工作来说可能有点矫枉过正(但从好的方面来说,你可能会使用评估版本,因为你不关心水印输出)。
要提取数据和签名,您可以在 PDF 的 /ByteRange 字段中使用数字。它有 4 个数字作为 /ByteRange[abcd]。签名是从 b(th) 字节到 c(th) 字节,剩下的是数据。在 PHP 中,您可以使用 stream_get_contents() 函数按流获取内容。