THotPDF.ValidatePDFMACChain Method

從最舊的交叉參考區段到作用中修訂,驗證每一個 PDF MAC 修訂,並傳回各修訂專屬的完整性診斷

宣告

function ValidatePDFMACChain(const FileName: TFileName; const Password: AnsiString; out ValidationInfo: THPDFPDFMACChainValidationInfo): boolean; overload;
function ValidatePDFMACChain(const FileName: TFileName; const Password: AnsiString; const Options: THPDFPDFMACOptions; out ValidationInfo: THPDFPDFMACChainValidationInfo): boolean; overload;

驗證模型

結果記錄

THPDFPDFMACChainValidationInfo 會回報 RevisionCount、FirstMACRevisionIndex、ValidatedRevisionCount、FailureRevisionIndex、FailureXRefOffset、權限涵蓋、salt 穩定性、摘要單調性,以及每個修訂一筆的 THPDFPDFMACRevisionValidation 記錄

THPDFPDFMACChainFailure 區分修訂邊界錯誤、缺少 MAC、無效或被置換的 MAC、KDFSalt 變更、摘要強度下降與已驗證權限降級

實作只列舉一次修訂鏈並更新單一累計交叉參考狀態,避免暫存 PDF 複本與重複的物件索引,同時對每個受保護修訂保留獨立的密碼學驗證

Delphi 範例

var
  ChainInfo: THPDFPDFMACChainValidationInfo;
begin
  if not PDF.ValidatePDFMACChain('authenticated.pdf', 'user-password',
    ChainInfo) then
    raise Exception.CreateFmt('Revision %d at xref %d failed: %s',
      [ChainInfo.FailureRevisionIndex, ChainInfo.FailureXRefOffset,
       ChainInfo.Message]);
end;

預檢

CreatePreflightReport 會以 PDFMACRevisionChain 公開同樣的結果,讓自動化流程能區分目前生效修訂版的有效性,與整條修訂版鏈的有效性

若只需檢查作用中修訂,請參閱 ValidatePDFMAC,或是參考 PDF MAC 演算法靈活性與原則設定檔 來了解摘要原則語意