用PHP验证签名的PDF文档

时间:2014-04-12 09:49:57

标签: php tcpdf signature sign verify

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

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

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

1 个答案:

答案 0 :(得分:1)

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