我有一个签名的 PDF 文档。它是使用 TCPDF 签名的。现在我想验证一下。这是我的解决方案:

  • 获取已签名 pdf 的内容。
  • 根据/ByRange 字段获取原始内容和签名值。
  • 从签名值中获取加密的摘要消息。它是签名值末尾的八位字节字符串。
  • 使用 Openssl_public_decrypt() 函数用公钥解密加密的摘要消息。然后我们有一个带有前缀的字符串(“3021300906052b0e03021a05000414”)。这个前缀表示使用的哈希函数是 SHA-1。去掉前缀后,我们得到摘要消息 D1。
  • 使用 SHA1() 函数对原始内容进行散列,我们得到摘要消息 D2。
  • 比较 D1 和 D2。如果 D1 = D2,则签名有效,反之亦然。

  • 我的问题是在最后一步,当我比较 D1 和 D2 时,它们不相等。我不知道为什么。
    谢谢你的帮助。

    最佳答案

    You should try based on following example
    <?php
    // $data and $signature are assumed to contain the data and the signature
    
    // fetch public key from certificate and ready it
    $pubkeyid = openssl_pkey_get_public("file://src/openssl-0.9.6/demos/sign/cert.pem");
    
    // state whether signature is okay or not
    $ok = openssl_verify($data, $signature, $pubkeyid);
    if ($ok == 1) {
        echo "good";
    } elseif ($ok == 0) {
        echo "bad";
    } else {
        echo "ugly, error checking signature";
    }
    // free the key from memory
    openssl_free_key($pubkeyid);
    ?>
    more Examples ad explanation
     http://www.php.net/manual/en/function.openssl-verify.php
    

    关于php - 在 PHP 中验证签名的 PDF 文档,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23028774/

    10-16 07:46