Java IText从签名PDF中提取原始文件并比较哈希
我有一个签名的PDF。签名涵盖了整个文件,并且是有效的 我想提取原始pdf,将其哈希值与未签名pdf的哈希值进行比较 我使用以下代码提取原始pdf:Java IText从签名PDF中提取原始文件并比较哈希,java,pdf,hash,itext,signed,Java,Pdf,Hash,Itext,Signed,我有一个签名的PDF。签名涵盖了整个文件,并且是有效的 我想提取原始pdf,将其哈希值与未签名pdf的哈希值进行比较 我使用以下代码提取原始pdf: PdfReader reader = new PdfReader(FILESIGNED); AcroFields acrofields = reader.getAcroFields(); //pdf have a unique signature String signatureName = acrofields.getSignatureNames
PdfReader reader = new PdfReader(FILESIGNED);
AcroFields acrofields = reader.getAcroFields();
//pdf have a unique signature
String signatureName = acrofields.getSignatureNames().get(0);
FileOutputStream os = new FileOutputStream(FILEORIGINAL);
InputStream ip = acrofields.extractRevision(signatureName);
int n = 0;
byte bb[] = new byte[1028];
while ((n = ip.read(bb)) > 0)
os.write(bb, 0, n);
os.close();
ip.close();
reader.close();
但是提取的pdf文件与原始文件不同。
我会在签名前提取修订版吗?可能吗
谢谢你的帮助。
萨拉
我想提取原始pdf,将其哈希值与未签名pdf的哈希值进行比较
一般来说,这是不可能的
当iText(或其他PDF签名库或应用程序)对PDF进行签名时,它们:
为此,只需在签名之前搜索最新的文件结尾标记,然后将其切断。(实际上有一点不安全,最后一个行尾标记可能是也可能不是原始PDF的一部分。)0向下投票接受感谢帮助。我还有一个要求。我读过这张票:从签名的pdf中获取原始内容如果我有一个签名,就不可能提供原始pdf。但是如果我有更多的签名(修订版),从修订版n.2可以得到修订版n.1。我的问题是:可以在pdf中创建第一个修订版(例如添加隐藏注释),然后添加签名。因此,更容易获得文件的先前版本。谢谢你help@Sara为了能够获得原始版本,必须将第一个签名作为增量更新应用;当您使用iText时,这意味着使用append模式。(您需要使用
PdfStamper.createSignature
重载和boolean
参数,并将该参数设置为true
)如果您不想要我在回答中提到的少量不安全,您可以添加包含原始版本长度的文档元数据,因此,无论行的尾端是否是原始的一部分,都没有不安全的地方。我们总是使用createSignature(reader,signedPDF,“\0”,tempFile,true)签名。但只有签名才能创建pdf版本?或者还有其他更改会创建修订?@Sara“但只有签名才能创建pdf格式的修订?”-pdf不知道修订的明确概念。一些软件产品将修订的概念解释为PDF中的某些结构。最明显的这种结构是A有符号的修订版,因为有符号的字节范围意味着它的大小,B是当前的修订版,它只是整个文件。iText有用于提取A类修订的代码,而对于B类修订,无需执行任何操作即可提取。@Мааазачзазагаачзааа107。该调用提取签名字段签名所在的修订,而不是您似乎假设的添加之前的修订。