php - 在 PHP 中验证签名的 PDF 文档

标签 php tcpdf signature sign verify

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

相关文章:

php - 生成 AWS 签名 (ShipLogic)

php - Symfony 4 - 找不到所有迁移版本

PHP Regex 没有按预期工作

php - 使用Mysql数据库用户名和密码登录

php - 我需要将 "functions"与 "for loop"与 php 结合起来

javascript - Codeigniter - 如何使用 javascript 变量重定向到 Controller ?($this->load->view() 不工作)

php - 为什么在 php 中使用 TCPDF 的单元格中有左填充和上填充?

php - 如何使用php和TCPDF在pdf中绘制虚线?

Java Arrays.binarySearch(Object[], int, int, Object) 签名无法识别

Java Signature 无法跨平台验证