Sam*_*isa 8 pdf digital-signature
我需要了解PDF是否有任何类型的数字签名.我必须管理巨大的 PDF,例如每个500MB,所以我只需要找到一种方法将非签名与签名分开(因此我只能将签名的PDF发送到管理它们的方法).到目前为止发现的任何程序都涉及尝试通过例如Bouncycastle libs(在我的情况下,对于Java)提取证书:如果它存在,则pdf被签名,如果它不存在或者引发异常,则不是(原文如此!).但这显然是时间/内存消耗,而不是资源浪费实现的一个例子.
是否有任何与语言无关的快速方式,例如打开PDF文件,读取第一个字节并查找告知文件已签名的信息?或者,是否有任何参考手册详细说明内部如何制作PDF?
先感谢您
使用命令行,您可以使用 poppler-utils 包中的 pdfsig 工具检查文件是否具有数字签名(适用于 Ubuntu 20.04)。
pdfsig pdffile.pdf
Run Code Online (Sandbox Code Playgroud)
将生成包含有关签名和验证数据的详细数据的输出。如果您需要扫描 pdf 文件树并获取签名 pdf 列表,您可以使用 bash 命令,例如:
find ./path/to/files -iname '*.pdf' \
-exec bash -c 'pdfsig "$0"; \
if [[ $? -eq 0 ]]; then \
echo "$0" >> signed-files.txt; fi' {} \;
Run Code Online (Sandbox Code Playgroud)
您将在本地目录中的signed-files.txt 文件中获得签名文件的列表。
我发现这比尝试从 pdf 文件中 grep 一些文本要可靠得多(例如,立陶宛的签名服务生成的 pdf 不包含前面答案中提到的字符串“SigFlags”)。
您将要使用PDF库而不是尝试自己实现这一点,否则您将陷入困境,处理线性化文档,过滤器,增量更新,对象流,交叉引用流等的变体.
关于参考资料; 根据我粗略的搜索,看起来Adobe不再向任何人提供ISO 32000:2008规范的版本,尽管该规范主要是将PDF v1.7参考手册翻译成符合ISO的语言.
因此,假设PDF v1.7参考,最相关的部分将是8.7(数字签名),3.6.1(文档目录)和8.6(交互式表单).
基本过程将是:
使用可以使用文档的交叉引用表来导航到正确的间接对象的PDF库应该比对证书的文档的强力搜索更快且资源更少.
| 归档时间: |
|
| 查看次数: |
9068 次 |
| 最近记录: |