THotPDF.ValidatePDFMACChain Metodu
En eski cross-reference bölümünden etkin revizyona kadar her PDF MAC revizyonunu doğrular ve revizyona özgü bütünlük tanılamaları döndürür
Bildirim
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;
Doğrulama modeli
- Revizyon indeksleri sıfır tabanlıdır ve orijinal revizyondan etkin revizyona doğru sıralanır
AuthCodeiçeren ilk revizyon zincir çapası olur; bundan sonraki her revizyon geçerli bir PDF MAC içermelidir- Her MAC, o revizyonun eşleşen
startxrefve%%EOFsınırında biten tam bayt önekine göre doğrulanır - Doğrulayıcı; daha yeni bir etkin revizyon MAC'i geçerli kalsa bile değiştirilmiş geçmiş bir MAC'i reddeder
KDFSaltçapadan sonra sabit kalmalıdır ve doğrulanan MAC revizyonları arasında digest gücü azalmamalıdır- Kimlik doğrulamalı
/Pve/Permsdeğerleri her revizyonda denetlenir; PDF MAC requirement izin biti de buna dahildir
Sonuç kayıtları
THPDFPDFMACChainValidationInfo; RevisionCount, FirstMACRevisionIndex, ValidatedRevisionCount, FailureRevisionIndex, FailureXRefOffset, izin kapsamını, salt kararlılığını, digest monotonluğunu ve her revizyon için bir THPDFPDFMACRevisionValidation kaydını raporlar
THPDFPDFMACChainFailure; revizyon sınırı hatalarını, eksik MAC'leri, geçersiz veya değiştirilmiş MAC'leri, değişmiş KDFSalt'u, digest düşürmeyi ve kimlik doğrulamalı izin düşürmesini birbirinden ayırır
Uygulama revizyon zincirini bir kez numaralandırır ve tek bir kümülatif cross-reference durumunu güncelleyerek geçici PDF kopyalarını ve tekrarlanan nesne indekslemesini ortadan kaldırır; her korumalı revizyon için bağımsız kriptografik doğrulama korunur
Delphi örneği
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;
Preflight
CreatePreflightReport aynı sonucu PDFMACRevisionChain olarak açar; böylece otomatik iş akışları etkin revizyon geçerliliğini tam revizyon zinciri geçerliliğinden ayırabilir
Yalnızca etkin revizyonun denetlenmesi gerekiyorsa ValidatePDFMAC sayfasına, digest politika semantiği için PDF MAC algoritma çevikliği ve politika profilleri sayfasına bakın