我有一个基本的测试类,使用iText检查PDF文档中是否有数字签名,这是代码:
private int getNumFirme(String path)
{
try
{
java.nio.file.Path pathF = Paths.get(path);
byte [] bytes = Files.readAllBytes(pathF);
PdfReader reader = new PdfReader(bytes);
pathF = null;
int nFirme = reader.getAcroFields().getSignatureNames().size();
reader.close();
return nFirme;
} catch (IOException e) {
e.printStackTrace();
return -1;
}
}
除了特定的pdf文档外,这个小方法有效。 当我使用该文档的方法时,结果为0(无符号),当我用Adobe Acrobat打开它时,它似乎没有任何签名(没有弹出窗口:“所有签名已经验证”或“几乎一个签名有问题” )甚至在元数据中也没有签名的迹象,但如果我用Dike打开文件并验证它,它就包含了数字签名数据。
我在互联网上看到问题可能是这个pdf是用CAdES签名签名的(我不是数字签名的专家,我不太清楚与'普通'PAdES签名的不同之处)因此检查失败,但我也读到用CAdES签名签名的文件通常具有“.p7m”扩展名。
这些文件可能是用CAdES标志签名的,并且它有一个“.pdf”扩展名吗?或许还有另一个问题? 如果CAdES标志是问题,我该如何验证文件上的签名? (我不想知道签名是否有效,我只想知道文件是否签名)
感谢您提供帮助的建议,并对我不完美的英语表示抱歉