我有一份已签名的 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/