如何检查 PDF 是否数字签名(PHP)

4
我的PHP程序使用TCPDF生成PDF文件,然后:
  1. 用户下载PDF文件;
  2. 用户对PDF文件进行数字签名;
  3. 用户上传已签名的PDF文件;
为了完成第3步,我想检查上传的文件是否已经进行了数字签名。
更好的方法是检查上传的文件是否与第1步生成的文件相同。
1个回答

8

试试这个:

 <?php
    //from: https://dev59.com/XGox5IYBdhLWcg3wql9t#9059073
        function isStringInFile($file,$string){

        $handle = fopen($file, 'r');
        $valid = false; // init as false
        while (($buffer = fgets($handle)) !== false) {
            if (strpos($buffer, $string) !== false) {
                $valid = TRUE;
                break; // Once you find the string, you should break out the loop.
            }      
        }
        fclose($handle);

        return $valid;

    }

搜索"adbe.pkcs7.detached":

//Signed?
echo isStringInFile('mypdf.pdf', 'adbe.pkcs7.detached');

要检查是否为相同的PDF文件,您可以使用TCPDF的setKeyWords()来添加一些唯一的关键词,并使用 Smalot PDF解析器进行检查:

<?php
    $parser = new \Smalot\PdfParser\Parser();
    $pdf    = $parser->parseFile('signed_pdf.pdf'); //com keywords
    $details = $pdf->getDetails();

1
另外,您还应该检查 ETSI.CAdES.detached 以获取符合欧盟 ETSI 标准的签名。更多关于 PAdES 的内容请参见我的文章 - Michael Chourdakis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接