مقاله فنی

Auditing PDF Encryption and Permissions in Delphi with PDFlibPas

این نسخه بومی‌سازی شده، Auditing PDF Encryption and Permissions in Delphi with PDFlibPas را بر اساس مقاله پایه انگلیسی به‌روزرسانی شده برای تیم‌هایی که با Delphi، PDF و نرم‌افزارهای اسناد کار می‌کنند، بررسی می‌کند

این صفحه، نسخه پایه به‌روزرسانی شده را به نقاط کنترلی عملی برای طراحی، پیاده‌سازی و اعتبارسنجی تبدیل می‌کند

محتوای همگام‌سازی شده از نسخه پایه

مقاله پایه با زمینه‌های عملی، تصمیمات فنی و مثال‌های ملموس گسترش یافته است، بنابراین این صفحه به جای یک خلاصه کوتاه، به عنوان یک راهنمای کاری عمل می‌کند

نکات مهم نسخه به‌روزرسانی شده:

  • ابتدا از فایل‌های ورودی کوچک و قابل بازتولید استفاده کنید
  • نام محصولات، APIها، فایل‌ها و مقادیر ثابت را دست‌نخورده نگه دارید
  • خروجی اعتبارسنج و نسخه‌ها را همراه با فایل تست تولید شده ذخیره کنید

تصمیمات عملی پیاده‌سازی

با نوع فایل، نتیجه مورد انتظار، و خطایی که کاربر باید ببیند شروع کنید؛ سپس هر فراخوانی API را به یک نتیجه قابل بررسی پیوند دهید تا اعتبارسنجی، لاگ‌ها و پشتیبانی بتوانند وضعیت مشتری را بازتولید کنند

  • ابتدا از فایل‌های ورودی کوچک و قابل بازتولید استفاده کنید
  • نام محصولات، APIها، فایل‌ها و مقادیر ثابت را دست‌نخورده نگه دارید
  • خروجی اعتبارسنج و نسخه‌ها را همراه با فایل تست تولید شده ذخیره کنید

نکات کد و API

مثال‌های کد برای مقایسه مستقیم با پروژه‌های Delphi، C++Builder و Lazarus/FPC بدون تغییر حفظ شده‌اند

var
  PDF: TPDFlib;
begin
  PDF := TPDFlib.Create;
  try
    if PDF.LoadFromFile('contract.pdf', UserPassword) <> 1 then
      raise Exception.Create('Open failed: wrong password or damaged file');
    Writeln('status    : ', PDF.EncryptionStatus);     // decrypted / encrypted / unknown
    Writeln('algorithm : ', PDF.EncryptionAlgorithm);  // RC4 vs AES family
    Writeln('strength  : ', PDF.EncryptionStrength);   // key length class
    Writeln('owner pw? : ', PDF.CheckPassword(CandidatePassword));
  finally
    PDF.Free;
  end;
end;
var
  PDF: TPDFlib;
  R: Integer;
begin
  PDF := TPDFlib.Create;
  try
    R := PDF.EncryptFile('in.pdf', 'out.pdf', 'owner-secret', 'user-secret', 4,
      PDF.EncodePermissions(1, 0, 0, 0,    // print allowed; copy/change/notes denied
                            0, 0, 0, 1));  // extended set: full-quality print only
    if (R = 1) and (PDF.LoadFromFile('out.pdf', 'user-secret') = 1) then
    begin
      Writeln('algorithm = ', PDF.EncryptionAlgorithm);
      Writeln('strength  = ', PDF.EncryptionStrength);
      Writeln('owner pw accepted: ', PDF.CheckPassword('owner-secret'));
    end;
  finally
    PDF.Free;
  end;
end;
if not Doc.Encrypt('owner-secret', 'user-secret', esAES256BitAcroX,
  [ppCanPrint], [ppCanPrintFull]) then
  raise Exception.Create('Encryption failed');

بررسی قبل از انتشار

فایل خروجی را با همان ابزارهایی بررسی کنید که مشتری یا مخزن اسناد استفاده خواهد کرد؛ نسخه کامپوننت، داده‌های تست، نسخه اعتبارسنج و نتیجه مشاهده شده را ثبت کنید