ФлагÑÑ Ð·Ð° пÑава не е заÑиÑен меÑ
анизÑм. ÐиÑÑÑ, койÑо забÑанÑва копиÑанеÑо, Ñе намиÑа в ÑÑÑÐ¸Ñ ÑеÑник /Encrypt, кÑдеÑо Ñе ÑÑÑ
ÑанÑва и кÑипÑогÑаÑиÑÑа. Това Ð¼Ñ Ð¿Ñидава илÑÐ·Ð¸Ñ Ð·Ð° ÑигÑÑноÑÑ, какваÑо Ñой вÑÑÑноÑÑ Ð½Ðµ пÑиÑежава, и в моменÑа, в койÑо ÑазглеждаÑе двеÑе каÑо едно и ÑÑÑо неÑо, ваÑиÑÑ Ð¾Ð´Ð¸Ñ Ð·Ð°Ð¿Ð¾Ñва да дава гÑеÑни ÑезÑлÑаÑи. ÐдинÑÑвениÑÑ ÑÑÑеÑÑвен вÑпÑÐ¾Ñ Ð¿Ñи PDF е не дали е ÑиÑÑиÑан, а неÑо по-конкÑеÑно и ÑÑÑдно: кой алгоÑиÑÑм е използван, ÐºÐ¾Ñ ÑÐµÐ²Ð¸Ð·Ð¸Ñ Ð½Ð° модÑла за ÑигÑÑноÑÑ, ÐºÐ¾Ñ Ð¾Ñ Ð´Ð²ÐµÑе паÑоли е зададена, какви пÑава Ñа заÑвени и кои ÑаÑÑи Ð¾Ñ Ñайла Ñа заÑегнаÑи Ð¾Ñ ÑиÑÑиÑанеÑо. Ðдин Ñайл може да бÑде ÑоÑмално ÑиÑÑиÑан и пÑакÑиÑеÑки оÑвоÑен. Той може да не позволÑва ÑеÑене на ÑÑдÑÑжаниеÑо, но да оÑÑави ÑвоиÑе меÑаданни в неÑиÑÑиÑан ÑекÑÑ. Ðоже да забÑани пеÑаÑанеÑо ÑÑез Ñлаг, койÑо вÑеки ÑеÑÐµÑ Ð¼Ð¾Ð¶Ðµ да игноÑиÑа. ÐдиÑÑÑ Ð½Ð° PDF ознаÑава да Ñе анализиÑа вÑеки Ð¾Ñ Ñези аÑпекÑи пооÑделно, и PDFlibPas, PDF ÑдÑоÑо на losLab за Delphi и C++Builder, ÑазкÑива вÑеки Ð¾Ñ ÑÑÑ
ÑÑез плоÑÑк API Ñ ÑелоÑиÑлени деÑкÑипÑоÑи и ÑÑез Ñлой Ð¾Ñ Ñипове.
Ðакво вÑÑÑноÑÑ Ð·Ð°Ð¿Ð¸Ñва ÑеÑникÑÑ /Encrypt
СÑандаÑÑÑÑ ISO 32000-1 §7.6 деÑиниÑа заÑиÑаÑа на докÑменÑи ÑÑез нÑколко запиÑа в ÑеÑника, а PDFlibPas ги оÑÑазÑва едно кÑм едно в запиÑа TPDFEncryption. ÐеÑÑиÑÑа на ÑилÑÑÑа V и ÑевизиÑÑа R избиÑÐ°Ñ ÑамилиÑÑа на алгоÑиÑÑма. СвойÑÑвоÑо Length ÑÑдÑÑжа ÑазмеÑа на клÑÑа. ÐиÑовеÑе за пÑава Ñе намиÑÐ°Ñ Ð² P, низовеÑе за валидиÑане на паÑолиÑе на ÑобÑÑвеника и поÑÑебиÑÐµÐ»Ñ - в O и U (каÑо за AES-256 Ñа добавени OE и UE), ÑлагÑÑ EncryptMetadata Ñе намиÑа до ÑÑÑ
, а ÑÑи дÑÑги полеÑа ÑÐºÐ°Ð·Ð²Ð°Ñ ÑилÑÑиÑе за ÑиÑÑиÑане, пÑиложени ÑÑоÑвеÑно кÑм ÑекÑÑови низове, поÑоÑи и вгÑадени Ñайлове.
ÐÑедимÑÑвоÑо на Ñози Ð·Ð°Ð¿Ð¸Ñ Ðµ, Ñе Ñой не инÑеÑпÑеÑиÑа данниÑе вмеÑÑо ваÑ. Той ви пÑедоÑÑÐ°Ð²Ñ Ð¾ÑÐ¸Ð³Ð¸Ð½Ð°Ð»Ð½Ð¸Ñ ÑеÑник и ви позволÑва Ñами да Ñи напÑавиÑе изводиÑе, коеÑо е Ð¾Ñ ÑÑÑеÑÑвено знаÑение пÑи одиÑ. СлÑÑаÑÑ Ñ Ð½ÐµÑиÑÑиÑан ÑекÑÑ Ð²ÑÑÑе в ÑиÑÑиÑан Ñайл Ñе вижда Ð¾Ñ ÑвойÑÑваÑа StringFilterIdentity и StreamFilterIdentity: когаÑо нÑкое Ð¾Ñ ÑÑÑ
е вÑÑно, ÑÑоÑвеÑниÑе данни пÑÐµÐ¼Ð¸Ð½Ð°Ð²Ð°Ñ Ð¿Ñез ÑилÑÑÑа Identity непокÑÑнаÑи, незавиÑимо какво показва ÑÑаÑÑÑÑÑ Ð½Ð° ÑиÑÑиÑане на докÑменÑа. СкенеÑ, койÑо пÑовеÑÑва Ñамо за налиÑиеÑо на ÑеÑник /Encrypt, Ñе оÑÑеÑе Ñайла каÑо заÑиÑен, вÑпÑеки Ñе низовеÑе и поÑоÑиÑе в него Ñе ÑÑÑ
ÑанÑÐ²Ð°Ñ Ð² ÑиÑÑ Ð²Ð¸Ð´. СÑÑиÑÑ Ð´ÐµÑайл важи и за меÑаданниÑе: когаÑо EncryptMetadata е лÑжа (false), XMP пакеÑÑÑ Ð¾ÑÑава ÑеÑим за ÑÑÑÑеÑи маÑини, докаÑо ÑÑдÑÑжаниеÑо на ÑÑÑаниÑиÑе е ÑкÑиÑо, коеÑо е важно, ако пÑавилаÑа ви за обÑабоÑка на докÑменÑи завиÑÑÑ Ð¾Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð¸ÐµÑо или авÑоÑа.
ÐÑаÑка пÑовеÑка на ÑигÑÑноÑÑÑа ÑÑез оÑÐ½Ð¾Ð²Ð½Ð¸Ñ API
Ðа повеÑеÑо пÑоÑеÑи ÑеÑиÑи Ð¸Ð·Ð²Ð¸ÐºÐ²Ð°Ð½Ð¸Ñ Ð¾Ñ Ð¾ÑÐ½Ð¾Ð²Ð½Ð¸Ñ API Ð´Ð°Ð²Ð°Ñ Ð¾ÑÐ³Ð¾Ð²Ð¾Ñ Ð½Ð° ежедневниÑе вÑпÑоÑи. LoadFromFile вÑÑÑа 1 пÑи ÑÑпеÑ
и Ñлед каÑо докÑменÑÑÑ Ðµ оÑвоÑен, инÑÑÑÑменÑиÑе за пÑовеÑка Ð´Ð¾ÐºÐ»Ð°Ð´Ð²Ð°Ñ Ð·Ð° неговоÑо ÑÑÑÑоÑние Ñлед деÑиÑÑиÑане:
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;
ФÑнкÑиÑÑа CheckPassword е по-важна, оÑколкоÑо показва нейниÑÑ ÑигнаÑÑÑен Ñед. PDF деÑиниÑа две паÑоли Ñ ÑазлиÑна ÑÑепен на доÑÑÑп: поÑÑебиÑелÑкаÑа паÑола е необÑ
одима за ÑамоÑо оÑваÑÑне на Ñайла, а паÑолаÑа на ÑобÑÑвеника пÑедоÑÑÐ°Ð²Ñ Ð¿Ñлни пÑава и оÑÐ¼ÐµÐ½Ñ Ð±Ð¸ÑовеÑе за огÑаниÑениÑ. ÐайÑовеÑе на диÑка Ñа иденÑиÑни и в дваÑа ÑлÑÑаÑ, но ÑеÑиÑ, оÑвоÑена Ñ Ð¿Ð°ÑолаÑа на ÑобÑÑвеника, позволÑва опеÑаÑии, коиÑо поÑÑебиÑелÑкаÑа ÑеÑÐ¸Ñ Ð·Ð°Ð±ÑанÑва. ÐоÑади Ñази пÑиÑина одиÑ, койÑо не ÑегиÑÑÑиÑа кои пÑава Ñа пÑедÑÑавени, ÑÑдÑÑжа Ñамо половинаÑа иÑÑина. ÐлаÑовиÑÑ Ñлой пÑави Ñази Ñазлика видима: ÑвойÑÑваÑа TPDFDocument.HasUserPassword и HasOwnerPassword Ð¿Ð¾ÐºÐ°Ð·Ð²Ð°Ñ ÐºÐ°ÐºÐ²Ð¾ изиÑква ÑайлÑÑ, докаÑо IsUserPassword и IsOwnerPassword Ð¿Ð¾ÐºÐ°Ð·Ð²Ð°Ñ ÐºÐ¾Ñ Ð¿Ð°Ñола дейÑÑвиÑелно е оÑвоÑила ÑекÑÑаÑа ÑеÑиÑ. ÐапиÑвайÑе Ñози ÑÐ°ÐºÑ Ð² дневника, но никога не запиÑвайÑе ÑамиÑе паÑоли.
СÑепени на ÑиÑÑиÑане: кÑде AES-256 ознаÑава две ÑазлиÑни неÑа
ФÑнкÑииÑе Encrypt и EncryptFile Ð¾Ñ Ð¾ÑÐ½Ð¾Ð²Ð½Ð¸Ñ API пÑÐ¸ÐµÐ¼Ð°Ñ ÑелоÑиÑлена ÑÑойноÑÑ Ð·Ð° Ñила (Strength) Ñ Ð¿ÐµÑ Ð²Ñзможни опÑии: 0 за 40-биÑов RC4, 1 за 128-биÑов RC4, 2 за 128-биÑов AES (ÑÑвмеÑÑим Ñ Acrobat 7), 3 за 256-биÑов AES (вÑведен Ñ Acrobat 9) и 4 за 256-биÑов AES (изиÑкван Ð¾Ñ Acrobat X и по-нови веÑÑии).
ÐнÑеÑеÑноÑо е, Ñе 3 и 4 Ñа обознаÑени каÑо AES-256, но не пÑедÑÑавлÑÐ²Ð°Ñ ÐµÐ´Ð½Ð° и ÑÑÑа ÑÑ
ема. Сила 3 оÑговаÑÑ Ð½Ð° ÑÐµÐ²Ð¸Ð·Ð¸Ñ 5 на модÑла за ÑигÑÑноÑÑ: междинен ваÑианÑ, вÑведен Ñ Acrobat 9, койÑо ÑÑандаÑÑÑÑ ISO никога не пÑиема. Сила 4 оÑговаÑÑ Ð½Ð° ÑÐµÐ²Ð¸Ð·Ð¸Ñ 6, пÑи коÑÑо ÑÑнкÑиÑÑа за деÑиваÑÐ¸Ñ Ð½Ð° клÑÑове е подÑилена и ÑÑандаÑÑизиÑана в ISO 32000-2. Ðа докÑменÑи, коиÑо ÑÑздаваÑе днеÑ, нÑма пÑиÑина да избеÑеÑе 3 вмеÑÑо 4. ÐÑи Ð¾Ð´Ð¸Ñ Ð¾Ð±Ð°Ñе Ñази Ñазлика е кÑиÑиÑна: полиÑика, изиÑкваÑа "AES-256 ÑÑглаÑно ISO 32000-2", Ñе изпÑлнÑва Ñамо Ð¾Ñ R6, докаÑо R5 Ñайл, деклаÑиÑÐ°Ñ AES-256, Ñе пÑÐ¾Ð²Ð°Ð»Ñ Ð¿Ñи Ñази пÑовеÑка, вÑпÑеки Ñе пÑеминава ÑÑандаÑÑÐ½Ð¸Ñ ÑеÑÑ Ð·Ð° Ñила. ÐлаÑовиÑÑ Ñлой ги ÑазгÑаниÑава по име: esAES256Bit за R5 ÑÑеÑÑ esAES256BitAcroX за R6, а ÑвойÑÑвоÑо EncryptionAcroX оÑговаÑÑ Ð½Ð° вÑпÑоÑа за ÑевизиÑÑа Ñ Ð±Ñлева ÑÑойноÑÑ.
ÐиÑове за пÑава и ÑпеÑиÑикаÑа на дÑлжинаÑа на клÑÑа
ФÑнкÑиÑÑа EncodePermissions пакеÑиÑа оÑем Ñлага в ÑÑло ÑиÑло, коеÑо Ñе оÑаква Ð¾Ñ Encrypt и EncryptFile. ÐеÑаÑ, копиÑане, пÑомÑна и добавÑне на бележки ÑÑÑÑавÑÑ Ð¾ÑÐ½Ð¾Ð²Ð½Ð¸Ñ Ð½Ð°Ð±Ð¾Ñ, докаÑо попÑлванеÑо на полеÑа, доÑÑÑпноÑÑÑа, ÑглобÑванеÑо на докÑменÑа и пÑлноÑоÑмаÑниÑÑ Ð¿ÐµÑÐ°Ñ ÑÑÑÑавÑÑ ÑазÑиÑÐµÐ½Ð¸Ñ Ð½Ð°Ð±Ð¾Ñ. Ðажен деÑайл е, Ñе ÑеÑиÑиÑе ÑазÑиÑени опÑии Ð²Ð»Ð¸Ð·Ð°Ñ Ð² Ñила Ñамо пÑи Ñила Ð¾Ñ 128 биÑа нагоÑе. ФлагÑÑ Ð·Ð° пÑлноÑоÑмаÑен пеÑÐ°Ñ Ñледва ÑÑÑоÑо пÑавило: ако го изÑиÑÑиÑе, за да наложиÑе пеÑÐ°Ñ Ñ Ð½Ð¸Ñка ÑазделиÑелна ÑпоÑобноÑÑ, 40-биÑовиÑÑ Ð´Ð¾ÐºÑÐ¼ÐµÐ½Ñ Ñе игноÑиÑа Ñова огÑаниÑение, ÑÑй каÑо Ñази пÑомÑна ÑÑÑо изиÑква поне 128-биÑово ÑиÑÑиÑане. ÐадаванеÑо на огÑаниÑение за ниÑка ÑазделиÑелна ÑпоÑобноÑÑ Ð² 40-биÑов Ñайл Ñе бÑде пÑенебÑегнаÑо Ð¾Ñ ÑеÑÑиÑе, коиÑо Ñе оÑпеÑаÑÐ°Ñ Ð´Ð¾ÐºÑменÑа Ñ Ð¼Ð°ÐºÑимално каÑеÑÑво.
Ðо-важниÑÑ Ð²ÑпÑÐ¾Ñ Ðµ кой конÑÑолиÑа изпÑлнениеÑо на Ñези огÑаниÑениÑ, и оÑговоÑÑÑ Ðµ: никой, на когоÑо можеÑе да Ñе довеÑиÑе. ÐÑаваÑа Ñа пÑоÑÑо инÑÑÑÑкÑии кÑм ÑÑвмеÑÑимиÑе ÑеÑÑи, а не кÑипÑогÑаÑÑки огÑаниÑениÑ. ÐлÑÑÑÑ Ð·Ð° деÑиÑÑиÑане е иденÑиÑен незавиÑимо дали копиÑанеÑо е ÑазÑеÑено или забÑанено, Ñака Ñе огÑаниÑениÑÑа пÑоÑÑо гаÑанÑиÑÐ°Ñ Ð´Ð¾Ð±ÑоÑÑвеÑÑно поведение Ð¾Ñ ÑÑÑана на поÑÑебиÑелÑ. ЧеÑеÑ, койÑо ÑеÑи да игноÑиÑа Ñези биÑове, не Ñе ÑблÑÑква Ñ Ð½Ð¸ÐºÐ°ÐºÐ²Ð¸ кÑипÑогÑаÑÑки пÑеÑки. Ðко изиÑкванеÑо е да пÑедоÑвÑаÑиÑе извлиÑанеÑо на инÑоÑмаÑиÑ, а не пÑоÑÑо да го огÑаниÑиÑе, ÑайлÑÑ Ð¸Ð·Ð¸Ñква поÑÑебиÑелÑка паÑола, а пÑоÑеÑÑÑ Ñе нÑждае Ð¾Ñ Ð´Ð¾Ð¿ÑлниÑелен конÑÑол, каÑо одиÑниÑÑ Ð¾ÑÑÐµÑ ÑÑÑбва да поÑоÑи какÑв е ÑежимÑÑ Ð½Ð° ÑигÑÑноÑÑ Ð½Ð° вÑеки Ñайл, вмеÑÑо да Ñазглежда ÑлаговеÑе за пÑава каÑо Ñеална заÑиÑа.
ÐÑилагане на полиÑики и поÑвÑÑждаване на ÑезÑлÑаÑа
ÐÑилаганеÑо на ÑиÑÑиÑане кÑм ÑÑÑеÑÑвÑваÑи Ñайлове не изиÑква заÑежданеÑо им в обекÑноÑо дÑÑво. ФÑнкÑиÑÑа EncryptFile обÑабоÑва вÑ
одÑÑÐ¸Ñ Ñайл диÑекÑно кÑм изÑ
Ð¾Ð´Ð½Ð¸Ñ Ð² едно извикване, а одиÑниÑÑ Ð¿ÑоÑÐµÑ Ð¾ÑваÑÑ Ð¾Ñново ÑезÑлÑаÑа, за да поÑвÑÑди запиÑиÑе на диÑка. ÐÑиложеноÑо демонÑÑÑаÑионно пÑиложение за ÑиÑÑиÑане Ñледва ÑÑÑÐ¸Ñ Ð¼Ð¾Ð´ÐµÐ» на Ð·Ð°Ð¿Ð¸Ñ Ð¸ поÑледваÑо ÑеÑене:
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');
Така или инаÑе, обÑаÑноÑо ÑеÑене е кÑиÑиÑно важна ÑÑÑпка. То оÑкÑива гÑеÑки пÑи внедÑÑванеÑо, коиÑо инаÑе биÑ
а Ñе пÑоÑвили меÑеÑи по-кÑÑно пÑи клиенÑа: ÑÑаÑа веÑÑÐ¸Ñ Ð½Ð° библиоÑекаÑа, коÑÑо безÑÑмно намалÑва ÑилаÑа на ÑиÑÑиÑане, гÑеÑен изÑ
оден пÑÑ Ð¿Ð¾Ñади липÑа на пÑава за Ð·Ð°Ð¿Ð¸Ñ Ð² диÑекÑоÑиÑÑа или обÑÑкани аÑгÑменÑи в ÑелоÑиÑленаÑа ÑÑойноÑÑ Ð·Ð° пÑава. Ð ÑÑиÑе пÑоблема пÑÐµÐ¼Ð¸Ð½Ð°Ð²Ð°Ñ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸Ñе ÑеÑÑове, но Ñе пÑовалÑÑ Ð² Ñеална ÑÑеда, а повÑоÑноÑо оÑваÑÑне ги пÑевÑÑÑа в изклÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾ вÑеме на ÑамоÑо изпÑлнение. ÐеÑодÑÑ GetEncryptionFingerprint вÑÑÑа компакÑна ÑÑойноÑÑ, коÑÑо можеÑе да запиÑеÑе Ñ Ñ
ÑонологиÑÑа на задаÑаÑа, Ñака Ñе поÑледваÑо ÑÑавнение да ÑÑÑанови дали два Ñайла ÑподелÑÑ ÐµÐ´Ð½Ð° и ÑÑÑа конÑигÑÑаÑÐ¸Ñ Ð½Ð° ÑигÑÑноÑÑ Ð±ÐµÐ· оÑваÑÑнеÑо им.
ФалÑиви одиÑни ÑезÑлÑаÑи, за коиÑо да пÑедвидиÑе код
ÐÑколко Ñаблона ÑеÑÑо водÑÑ ÑкенеÑиÑе за ÑигÑÑноÑÑ Ð´Ð¾ погÑеÑни заклÑÑениÑ, каÑо Ñова обикновено Ñе дÑлжи на опÑоÑÑÑване на комплекÑен вÑпÑÐ¾Ñ Ð´Ð¾ оÑÐ³Ð¾Ð²Ð¾Ñ Ñ Ð´Ð° или не. ФилÑÑÑÑÑ Ð·Ð° ÑиÑÑиÑане Identity е най-ÑÑниÑÑ Ð¿ÑимеÑ: налиÑиеÑо на ÑеÑник /Encrypt показва, Ñе ÑайлÑÑ Ðµ заÑиÑен, но ÑекÑÑовиÑе низове и поÑоÑиÑе пÑÐµÐ¼Ð¸Ð½Ð°Ð²Ð°Ñ Ð¿Ñез ÑилÑÑÑа Identity без пÑомÑна, коеÑо ознаÑава, Ñе ÑÑдÑÑжаниеÑо е в ÑиÑÑ Ð²Ð¸Ð´. ÐÑовеÑкаÑа на StringFilterIdentity и StreamFilterIdentity, пÑеди да деклаÑиÑаÑе Ñайла каÑо заÑиÑен, е пÑавилноÑо ÑеÑение.
РазделениеÑо пÑи меÑаданниÑе е по-Ñино. СвойÑÑвоÑо EncryptMetadata може да Ñе Ñазминава Ñ Ð¾ÑÑаналаÑа ÑаÑÑ Ð¾Ñ Ð´Ð¾ÐºÑменÑа в двеÑе поÑоки, оÑÑавÑйки ÑиÑÑиÑан Ñайл Ñ ÑеÑим XMP Ð¿Ð°ÐºÐµÑ Ð¸Ð»Ð¸ по-ÑÑдко обÑаÑноÑо. ТвÑÑдениеÑо "ÑайлÑÑ Ðµ ÑиÑÑиÑан" не дава инÑоÑмаÑÐ¸Ñ Ð´Ð°Ð»Ð¸ меÑаданниÑе ÑÑÑо Ñа ÑиÑÑиÑани, коеÑо е важно, ако ÑÑÑÑеÑа маÑина или пÑоÑÐµÑ Ñе опиÑÐ²Ð°Ñ Ð´Ð° пÑоÑеÑÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð¸ÐµÑо на докÑменÑа. ÐÑикаÑениÑе Ñайлове добавÑÑ ÑÑеÑа поÑока: PDF ÑÑандаÑÑÑÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñва оÑделен ÑилÑÑÑ Ð·Ð° ÑиÑÑиÑане Ñамо за пÑикаÑени Ñайлове, Ñака Ñе Ñе Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ ÐµÐ´Ð¸Ð½ÑÑвенаÑа заÑиÑена ÑаÑÑ Ð² оÑвоÑен докÑÐ¼ÐµÐ½Ñ Ð¸Ð»Ð¸ обÑаÑно - единÑÑвенаÑа неÑиÑÑиÑана ÑаÑÑ Ð² заÑиÑен Ñайл. ÐÑÑиÑанеÑо на ÑÑиÑе ÑилÑÑÑа каÑо оÑделни полеÑа за низове, поÑоÑи и вгÑадени Ñайлове пÑедоÑвÑаÑÑва Ñези гÑеÑки, докаÑо ÑÑÑ
ÑанÑванеÑо на една бÑлева ÑÑойноÑÑ Ñано или кÑÑно Ñе доведе до гÑеÑка в Ð±Ð¸Ð·Ð½ÐµÑ Ð»Ð¾Ð³Ð¸ÐºÐ°Ñа.
ÐÑÐµÐ¼Ð°Ñ Ð²Ð°Ð½Ðµ на ÑиÑÑиÑанеÑо и Ð¸Ð·Ð±Ð¾Ñ Ð·Ð° нови Ñайлове
ÐдиÑÑÑ ÑеÑÑо пÑиклÑÑва Ñ ÑеÑение за пÑемаÑ
ване на заÑиÑаÑа, пÑи коеÑо ÑеÑ
ниÑеÑкаÑа ÑеализаÑÐ¸Ñ Ð½Ðµ е пÑеÑка. ÐеÑодÑÑ DecryptFile(InputFileName, OutputFileName, Password) запиÑва деÑиÑÑиÑано копие на Ñайла без пÑлно заÑеждане, а меÑодÑÑ Decrypt за заÑеден докÑÐ¼ÐµÐ½Ñ Ð¸Ð·Ð²ÑÑÑва ÑÑÑаÑа опеÑаÑÐ¸Ñ Ð² памеÑÑа, ако ÑайлÑÑ Ðµ оÑвоÑен. РдваÑа изиÑÐºÐ²Ð°Ñ Ð²Ð°Ð»Ð¸Ð´Ð½Ð° паÑола; никой Ð¾Ñ ÑÑÑ
не Ð·Ð°Ð¾Ð±Ð¸ÐºÐ°Ð»Ñ ÐºÑипÑогÑаÑÑкаÑа заÑиÑа. ÐÑÑинÑкоÑо огÑаниÑение ÑÑк Ñа ÑиÑмениÑе пÑавила, Ñака Ñе ÑегламенÑиÑайÑе ÑÑно кога е позволено пÑемаÑ
ванеÑо на заÑиÑаÑа и запиÑвайÑе Ñипа на паÑолаÑа, коÑÑо е ÑазÑеÑила опеÑаÑиÑÑа, ÑÑй каÑо ÑамаÑа ÑеÑ
ниÑеÑка ÑÑÑпка не оÑÑÐ°Ð²Ñ Ñледи в иÑÑоÑиÑÑа на Ñайла.
ÐзбоÑÑÑ Ð·Ð° нови Ñайлове е по-ÑеÑен, оÑколкоÑо пÑÐµÐ´Ð¿Ð¾Ð»Ð°Ð³Ð°Ñ Ð¿ÐµÑÑе вÑзможни ÑÑойноÑÑи за Strength. ÐзползвайÑе Ñила 4 (AES-256 ÑÐµÐ²Ð¸Ð·Ð¸Ñ 6), оÑвен ако не е наложиÑелно да оÑваÑÑÑе Ñайлове на ÑеÑÑи, по-ÑÑаÑи Ð¾Ñ Acrobat X. Сила 2 (AES-128) е пÑакÑиÑеÑкиÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ñм за по-ÑÑаÑи ÑиÑÑеми, коиÑо не Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ Ð°ÐºÑÑализиÑани. ÐпÑииÑе за RC4 пÑи 0 и 1 Ñе поддÑÑÐ¶Ð°Ñ Ñамо Ñ Ñел ÑÑвмеÑÑимоÑÑ Ð¸ Ð¾Ð´Ð¸Ñ Ð½Ð° ÑÑаÑи аÑÑ Ð¸Ð²Ð¸, а не за пÑоизводÑÑво на нови Ñайлове; използванеÑо им в нови пÑоекÑи пÑез 2026 г. е индикаÑÐ¸Ñ Ð·Ð° оÑÑаÑели изиÑкваниÑ.
СÑÑÑоÑниеÑо на ÑиÑÑиÑане влиÑе диÑекÑно на ÑеÑениÑÑа за подпиÑване, ÑÑй каÑо ÑабоÑнаÑа ÑÑеда за валидиÑане и подпиÑване изиÑква ÑÑÑаÑа диÑÑиплина за обÑаÑно ÑеÑене, на коÑÑо Ñе оÑновава Ñози одиÑ. ТемаÑа е Ñазгледана в ÑÑаÑиÑÑа за ÑабоÑна ÑÑеда за ÑÑвмеÑÑимоÑÑ Ð¸ подпиÑване. ÐогаÑо обÑабоÑваÑе пакеÑно голÑм бÑой Ñайлове ÑÑез EncryptFile, ÑÑководÑÑвоÑо за диÑекÑен доÑÑÑп до големи PDF докÑменÑи показва как да огÑаниÑиÑе наÑоваÑванеÑо на памеÑÑа. ÐÑлнаÑа докÑменÑаÑÐ¸Ñ Ð·Ð° ÑиÑÑиÑане е доÑÑÑпна на пÑодÑкÑоваÑа ÑÑÑаниÑа на PDFlibPas.