Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP How to check if PDF is digitally signed

My PHP program generates a PDF using TCPDF, then:

  1. User downloads the PDF;
  2. User digitally signs the PDF;
  3. User uploads the signed PDF;

For the step number 3, I'd like to check if the uploaded file is digitally signed.

Even better would be checks if the uploaded file is the same file that program generates on step 1.

like image 584
UBEX Avatar asked Oct 15 '25 14:10

UBEX


1 Answers

Try this:

 <?php
    //from: http://stackoverflow.com/a/9059073/284932
        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;

    }

Search "adbe.pkcs7.detached":

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

To check if is the same pdf you can use the TCPDF's setKeyWords() to put some unique keys and check with the Smalot PDF Parser:

<?php
    $parser = new \Smalot\PdfParser\Parser();
    $pdf    = $parser->parseFile('signed_pdf.pdf'); //com keywords
    $details = $pdf->getDetails();
like image 114
celsowm Avatar answered Oct 17 '25 04:10

celsowm



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!