piapia123
zh

读取 PDF 数字签名信息

文档

所有处理都在浏览器本地完成,数据不上传服务器

把文件拖到这里,或点击选择

PDF · 单个文件不超过 100 MB

⚠️ 这个工具只读取签名字段,不做密码学验证 —— 它不能告诉你签名是否有效、是否可信。这句话放在最前面,因为一个说了「已验证」而实际没验的工具,比没有这个工具更危险。 那它给什么?签名区间的覆盖范围,而这一条是能精确计算的。PDF 的签名不是给整个文件盖章,而是记录两段字节区间,中间那段空缺放的就是签名本身。于是可以算出:签名是不是从文件开头开始的、以及有没有覆盖到文件末尾。后者尤其要紧 —— 如果签名只盖到第 800 字节而文件有 1000 字节,说明签完之后又追加了内容:加了附件、插了页,或者塞进了一段增量更新的新内容。 另外还会列出签名者、签名时间、原因、地点、签名方式(SubFilter)与原始的字节区间,便于你去别处核对。 两条边界:覆盖完整不等于签名有效 —— 签名可能用了不受信任的证书、或者干脆是伪造的,判断这个需要校验证书链,那是另一件事;反过来,覆盖不完整也不一定意味着被人恶意改动 —— 有些软件会在签名之后补写元数据。工具给的是事实与字节数,判断留给你。 ⚠️ 还要分清一件事:这里说的「签名」是数字签名(带证书、能验签的那种),不是页面上画的手写签名图或印章图片 —— 后者只是一张图,任何工具都读不出「谁签的」。

功能

  • 算并给出签名的覆盖范围:有没有盖到文件末尾、有没有盖到开头
  • 签完之后追加了内容时,给出「从第几字节之后」与字节数
  • 列出签名者、签名时间、原因、地点、签名方式(SubFilter)
  • 列出原始的字节区间,便于到别的工具里核对
  • 读不出有效区间时给「无法判断」,而不是默认成「覆盖完整」
  • 报告第一行就写明不做密码学验证,不冒充「已验证」
  • 文件不上传、不经过任何服务器

使用方法

  1. 把带签名的 PDF 拖进来
  2. 报告里先给覆盖范围,再给签名信息
  3. 核对「签名之后又追加了内容」那一条 —— 那通常是最要紧的
  4. 需要更强的结论(签名是否可信)时,用专门的验签工具或 Adobe Acrobat 的签名面板

常见问题

它验证签名了吗?
没有,而且这是刻意的。 完整的验签要拆开 CMS / PKCS#7 签名数据、算出签名字段里放的摘要、再校验 X.509 证书链与信任锚 —— 做错的方式是「对着一个伪造的签名说有效」,而用户会拿这个结论当依据。所以这里只陈述读到的事实,不下「有效 / 无效」的结论。需要真正的验签,请用专门做这件事的工具(Adobe Acrobat 的签名面板会给「签名有效」与「证书受信任」两个独立的结论,那正是这里不做的部分)。
那「覆盖范围」是什么意思?可靠吗?
可靠,因为它不需要密码学。 PDF 的签名记录了两段字节区间 `[起点1 长度1 起点2 长度2]`,中间空缺的那一段放的就是签名本身(通常是证书与签名值)。所以只要读这四个数、和文件长度比一下,就能确定签名实际盖住了哪些字节。第二段没到文件末尾,就是「签完之后又追加了内容」—— 追加附件、插页、写入增量更新的新版本,都会落在这一段里。这是可精确计算的事实,不是推测。
「签名之后又追加了内容」是不是就说明文件被篡改了?
不一定,但必须查清楚。追加的内容确实不在签名保护范围内,所以它可以是恶意的(塞一页假的条款、换一张图),也可以是良性的(某些软件在签名后补写元数据、某些阅读器留下了额外的空白)。要区分得看追加了什么 —— 而这个工具不做这个判断,它只告诉你从第几字节之后有东西、有多少字节。这里的立场是:把可计算的事实说准,把需要专业判断的留给专业的工具。
为什么我这份 PDF 明明有签名图,工具却说没有签名?
因为「签名图」和「数字签名」是两件不同的事。页面上画的手写签名或红色印章,本质上就是一张图片,谁都能贴上去,读不出任何可信信息。数字签名是写在 PDF 结构里的一段证书与签名值,能回答「谁签的、签完之后有没有被改」。这个工具查的是后者。一份 PDF 可以既有签名图又有数字签名,也可以只有图 —— 后者在结构上就是「没有签名」。

相关工具