Чтобы узнать, был ли файл изменен после подписания, можно использовать SignatureUtl#verifySignature
вместе с PdfPKCS7#verify
.
Давайте рассмотрим один из официальных примеров iText, чтобы узнать, как это можно сделать (этобыл написан на Java, но не должно быть никаких проблем с портированием его на C #, поскольку API точно такой же): https://github.com/itext/i7js-signatures/blob/develop/src/test/java/com/itextpdf/samples/signatures/chapter05/C5_01_SignatureIntegrity.java
Точнее, вас интересует следующий фрагмент:
public PdfPKCS7 verifySignature(SignatureUtil signUtil, String name) throws GeneralSecurityException, IOException {
System.out.println("Signature covers whole document: " + signUtil.signatureCoversWholeDocument(name));
System.out.println("Document revision: " + signUtil.getRevision(name) + " of " + signUtil.getTotalRevisions());
PdfPKCS7 pkcs7 = signUtil.verifySignature(name);
System.out.println("Integrity check OK? " + pkcs7.verify());
return pkcs7;
}
Обратите внимание, что SignatureUtil#verifySignature
на самом деле не проверяет целостность подписи, а только некоторые ее свойства.Его основная цель - создать объект PdfPKCS7
, который затем можно использовать для проверки целостности подписи с помощью PdfPKCS7#verify
.
Важно отметить, что приведенные выше методы не проверяют, действительны ли сертификаты, которые использовались для подписи документа.Они должны (при необходимости) проверяться отдельно.
В общем, я советую вам прочитать обзор функций подписи iText (книга бесплатная).Хотя книга была написана для iText5, на странице github iText можно найти полностью перенесенные примеры iText7: https://github.com/itext/i7js-signatures
PS Поскольку вы не сказали нам, какую версию iText вы используете, я далВы ответили в самом последнем: iText7.Однако, поскольку функции подписи были перенесены в iText7 с iText5, ответ легко воспроизвести в iText5.Просто изучите репозитории того же примера: Java one и C # one .