在 PHP 中验证签名的 PDF 文档

2023-12-09

我有一份已签名的 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PHP 中验证签名的 PDF 文档 的相关文章

  • 显示表中的记录

    我的第一个 PHP 项目遇到了一些麻烦 我试图从 MySQL 数据库 有 3 条记录 获取数据并将其显示在表格中 问题是它似乎只显示记录 2 和 3 它跳过了第 1 条记录 请参阅我的代码并在下面显示 if mysqli connect e
  • Prolog 谓词参数中实例化模式指示符的含义

    查看Prolog文档 谓词签名有时会写成如下 foo Bar Baz Qux Mop 什么是 and 我该如何解释它们 另外 这些是唯一存在的还是还有更多 在这种情况下 这些前缀运算符代表实例化模式 即它们告诉您哪些参数应该是变量或在调用谓
  • 更改 WhiteOctober TCPDF 捆绑包配置值

    我已经开始在我的 symfony 项目中使用 WhiteOctober TCPDF 包 但我不知道如何更改默认配置值 例如页面格式 我尝试将其放入我的 config yml 中 white october tcpdf tcpdf k tcp
  • .htaccess 异常导致主目录出现问题

    这是我的目录结构 localhost or livehost app bootstrap public vendor code demo 这是我的 htaccess
  • 当sql连接中存在两个同名列时,如何从一个表列中获取值

    当我连接两个具有相同名称列的表时 我目前面临着尝试获取值的问题 例如 table1 date和table2 date 每个表中的日期不同 我将如何获取 日期 本例中的表1 我目前正在跑步 while row mysqliquery gt f
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • 使用 php 在多维数组中按键排序[重复]

    这个问题在这里已经有答案了 可能的重复 在 PHP 中对多维数组进行排序 https stackoverflow com questions 2059255 sorting multidimensional array in php 如何在
  • 使用先前的反向引用作为命名捕获组的名称

    有没有办法使用对先前捕获组的反向引用作为捕获组的名称命名捕获组 这可能不可能 如果不可能 那么这就是一个有效的答案 下列 data description some description preg match data matches p
  • 如何在 PHP 中使用 cURL 发出同时包含 GET 和 POST 参数的请求?

    其他人已经问过如何从 perl java bash 等执行此操作 但我需要在 PHP 中执行此操作 并且我没有看到任何已提出的专门与 PHP 相关的问题 或包含 PHP 的答案 My code ch curl init url curl s
  • WordPress 分页自定义帖子类型

    我有一个名为 新闻 的页面 使用页面模板page newslist php 它应该显示来自自定义帖子类型 也称为新闻 的帖子 我意识到两者具有相同的名称会导致问题 因此在注册自定义帖子类型时 我进行了重写以将其与页面区分开来 rewrite
  • 使用 XSLT 将 XML 转换为 SQL

    由于我无法控制的原因 我将获得一个 XML 文件和一个 XSLT 文件 该文件可以将 XML 文件转换为 SQL 代码或错误 现在让我们假设我们可以信任提供 XML 文件的人不会在 XML 中包含危险的构造 我什至不知道是否应该使用 Sim
  • 使用php将数据存储到文本文件中?

    我正在尝试将数据存储在文本文件中 例如使用 php 将数组存储到文本文件中 而不是存储到 mysql 数据库中 例如 这里是要存储在文本文件中的数据 name gt john age gt 25 location gt australia
  • 使用 PHP 的 MySQL 连接字符串

    我正在尝试通过本地计算机连接到托管在我的服务器上的数据库 我的服务器有cPanel 11 它是一个典型的共享服务器 由CentOS提供支持 安装了PHP和MySQL 准确地说 我在同一台服务器上持有经销商帐户 我想在不同帐户或域之间访问数据
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • phpunit测试调用其他需要mock的类方法的方法

    我正在尝试创建一个非常标准的单元测试 在其中调用一个方法并断言它的响应 但是我正在测试的方法调用同一类中的另一个方法 该方法做了一些繁重的工作 我想模拟该方法 但仍按原样执行我正在测试的方法 仅使用从调用另一种方法返回的模拟值 我简化了示例
  • 如何在 OS X 上使用 OpenSSL 1.0.1 编译 PHP 5.5.19

    我已经安装了 OpenSSL 1 0 1j usr local ssl现在我尝试使用此版本的 OpenSSL 编译 PHP 5 5 19 这是我的配置过程 export CFLAGS arch x86 64 export CXXFLAGS
  • Sonata DateTimePickerType 类默认日期显示错误的日期时间格式

    我陷入困境 我不知道如何使用 sonata DateTimePickerType 类正确设置默认日期和时间 我尝试了不同的方法 但到目前为止 没有一种方法没有帮助 在下面的截图中 help 键显示正确的日期和时间 但是当我使用 dp 默认日
  • 如何在 Zend Framework 3 中注册自定义表单视图助手

    我正在将继承的 Zend Framework 2 应用程序迁移到 Zend Framework 3 并且在注册自定义表单视图助手时遇到了一些困难 这些助手在应用程序使用版本 2 时起作用 主要用于添加标签属性以实现可访问性 例如 这是一个自
  • 如何使用 PHP 对字符串进行 rot13 处理?

    我有一个很大的 php 代码 我想手动对其进行编码和解码 我的问题是 php 代码里面有很多单引号和双引号 因此我在使用时出现错误str rot13 功能如下 那么正确的语法是什么以及如何使用下面的函数进行编码 str rot13 That
  • 一种无需 JavaScript 即可在 PHP 中确定浏览器宽度的方法?

    首先有吗 或者我必须使用javascript 我希望能够更改使用的 CSS 因此 frex 我可以为移动设备或其他设备加载较小的字体 不幸的是 仅使用 PHP 无法检测用户分辨率 如果您使用 Javascript 则可以在 cookie 中

随机推荐

  • 在 Windows 批处理文件中访问剪贴板

    知道如何使用批处理文件访问 Windows 剪贴板吗 设置剪贴板的内容 如 Chris Thornton klaatu 和一堆其他人已经说过 使用 windir system32 clip exe 更新2 对于快速的一句台词 你可以这样做
  • 在Android中查看holder类

    这是一个基本问题 我正在浏览谷歌关于 Android 的官方视频 在其中他们使用 Viewholder 类作为 静态类Viewholder Image查看图像 文本视图文本 将此类声明为静态或将视图持有者用作静态内部类是否正确 我认为假设如
  • Python:运行时根据requirements.txt设置PYTHONPATH

    我有一个带有命令行脚本的 Python 应用程序 我通过公开脚本setuptools 入口点 功能 每当用户运行脚本时 我希望环境与包的一致requirements txt 这意味着环境必须包含与版本说明符匹配的每个依赖包的版本requir
  • SQLCMD:提示输入变量?

    来自 Oracle 的背景 Oracle 的 SQLPlus 可以让您指示一个变量 如果未设置该变量 系统会提示您提供一个值 我正在使用 SQLCMD 使用 var name 语法 在 SSMS SQLCMD 模式下 我得到 发生致命的脚本
  • Anaconda 更新后 Jupyter Notebook 内核失效

    我遇到了以下问题 更新 Anaconda 后 因为我将 skimage io 导入 Jupyter Notebook 中的项目时出错 出现了更大的错误 Dead Kernel 现在我无法启动一个项目 因为 Jupyter 给出以下错误 Co
  • 如何使用 iText\iTextSharp 创建圆角表格? [复制]

    这个问题在这里已经有答案了 我必须创建一个具有圆角的表格 如下所示 我可以用 iTextSharp 做到这一点吗 这是使用单元事件完成的 请参阅我的书中的日历示例 Java C 确保您没有向单元格添加任何 自动 边框 而是在单元格事件中自己
  • 防止浮动 div 换行到下一行

    首先 这是我的网站 您会注意到 在页面中间的分隔栏下方 有三列 一列包含表单 一列包含文本 一列包含链接 现在 将窗口大小调整为稍微小一些 右侧的 div 将下降到下一行 有没有办法不显示它 所以divs会调整 我有一个液体布局 到它们不适
  • 如何使用 CSS 来换行而不是用空格换行?

    使用以下标记 是否可以 以及如何 实现如预览中所示的换行 Markup div class filled box h2 Hi there h2 p I am just a text with some words that want to
  • XSLT 与 XProc - 所需类型中的参数绑定

    我正在尝试将调用 Saxon 版本 8 9 的批处理文件转换为 XProc 管道 Calabash 这是我的批量调用 java jar saxon8 jar o out xml in xml style xsl config config
  • 如何将数据表中的记录分页发送到服务器类

    当我单击全选 超链接 选项时 或者我想要将特定页面中的特定记录 使用复选框 发送到服务器类时 我试图将 jQuery 数据表中的所有记录发送到服务器类 但问题是当我单击表单提交按钮时 即导出PDF 仅获取当前页面中的记录 即使在 jquer
  • iOS 应用程序提交:删除 iPad 支持

    我有一个 iPhone 应用程序 不支持 iPad 布局 在 App Store 中发布了一年 我的客户希望从 iPad 的 App Store 中删除该应用程序 我知道它需要更新应用程序 但如何更改我的 plist 以反映更改 苹果允许这
  • 在 Linq 表达式主体中如何使用变量的值而不是对其的引用?

    这是我的代码 IQueryable
  • 在 JavaScript 中隐藏/欺骗引用者的最可靠方法是什么?

    通常 引荐来源网址可通过以下方式追踪 JavaScript 的document referrer 请求标头 即PHP SERVER HTTP REFERER 我已经设置了一个键盘演示它显示了这些属性 用于测试目的 要求 原始引用者应该有效地
  • Eclipse 2022-3 不再支持 CVS?

    将Eclipse升级到最新版本2022 3后 我发现官方软件源中似乎不再提供 Eclipse CVS Client 插件 这是过去几个版本安装CVS支持的方式 知道如何安装 CVS 支持吗 Update 对于最新的 Eclipse 版本 请
  • ClassCastException:android.widget.TextView 无法转换为 android.widget.ListView

    我不知道为什么我会得到这个类强制转换异常 我已经做了几次 Project gt Clean 仍然没有成功 请有人帮助我 谢谢 这是 ScheduleFragment java public class ScheduleFragment ex
  • GSM Modem如何处理送达报告?

    我想在应用程序中出于某种目的使用 GSM 调制解调器 我想要的是处理已发送短信列表的短信发送报告 GSM 调制解调器收件箱和发件箱仅限 15 件 每次我阅读收件箱时 GSM 调制解调器都会返回一个列表并清除列表 如何检查已从 GSM 调制解
  • 使用 Jersey + hibernate RESTful Web 服务上传和下载图像

    我决定将图像作为字节数组存储在数据库中 我收到错误 我的实体模型 带有 getter 和 setter Entity Table name USER schema test XmlRootElement public class User
  • ValueError:logits 和标签必须具有相同的形状((无,4)与(无,1))

    我尝试制作一个卷积神经网络来对狗和猫进行分类 我收到标题中提到的错误 从我的搜索中 有人说错误属于tensorflow和keras库的不同版本 有人说这是语法错误 我将把我的代码留在这里 告诉我哪里出错了 IMPORTING LIBRARI
  • if else 语句和 if_else 的不同行为

    我正在尝试创建一个函数 将数据帧的数据类型转换为factor如果列的类型为char否则我不会改变任何东西 但这里的问题是我可以做同样的事情if else声明但不使用if else陈述 这是相同的代码 注意 我正在使用titanic数据集 c
  • 在 PHP 中验证签名的 PDF 文档

    我有一份已签名的 PDF 文档 它是使用 TCPDF 进行签名的 现在我想验证一下 这是我的解决方案 获取签名 pdf 的内容 根据 ByRange字段获取原始内容和签名值 从签名值中获取加密的摘要消息 它是签名值末尾的八位字节字符串 使用