Security

Security

דף זה מכסה סיסמאות, הצפנה, וחתימות דיגיטליות. Document.OpenFile() / Document.Open() מקבלים סיסמה כדי לפתוח מסמך מוגן, Document.Save() מקבל אפשרות encrypt כדי להגן על אחד, ו-Document.Sign() / Document.Certify() / Document.VerifySignatures() מוסיפים ובודקים חתימות דיגיטליות.


פתיחה ופענוח של מסמכים מוגנים בסיסמה

העבר את { password: '...' } ל-Document.OpenFile() או ל-Document.Open() כדי לפתוח מסמך המוגן בסיסמת משתמש. אם הסיסמה חסרה או שגויה, הקריאה זורקת את InvalidPasswordError.

import { Document, InvalidPasswordError } from '@asposefoss/pdf';

try {
  const doc = Document.OpenFile('secret.pdf', { password: 'hunter2' });
  doc.WriteTo('decrypted.pdf');    // output is plaintext
} catch (e) {
  if (e instanceof InvalidPasswordError) console.error('wrong password');
  else throw e;
}

הצפנה בעת שמירה

Document.Save() (ו-Document.WriteTo()) מקבלים אפשרות encrypt. הצפנה מבוססת סיסמה היא המקרה הנפוץ; הספרייה תומכת גם בהצפנה עם מפתח ציבורי לאחת או יותר תעודות נמען, שנפתחת שוב עם המפתח הפרטי של הנמען.

// Encrypt to one or more recipient certificates (PEM string or DER bytes):
const bytes = doc.Save({
  encrypt: {
    recipients: [{ certificate: recipientCertPem }],
    algorithm: 'aes256',                 // 'aes256' (default) | 'aes128' | 'rc4'
    permissions: { copying: false },     // shared across all recipients
  },
});

// Open with the recipient's private key + certificate, or a PKCS#12 bundle:
const opened = Document.Open(bytes, {
  recipient: { privateKey, certificate: recipientCertPem },
});
console.log(opened.Permissions);         // recovered permission flags (not enforced)

חתימה והסמכה

Document.Certify() מוסיף חתימת הסמכה (מחבר) הנושאת טרנספורם DocMDP שמציינת אילו שינויים מאוחרים יותר מותרים; Document.Sign() מוסיף חתימת אישור רגילה נוספת שניתן לצרף באופן צבירי למעלה. שניהם מקבלים חותם { certificate, privateKey } ואובייקט אפשרויות (reason, location, name, fieldName, ו — עבור Certify() — permissions).

const certifying = Document.OpenFile('report.pdf');
await certifying.Certify(
  { certificate: author.certificate, privateKey: author.privateKey },
  { permissions: 'form-fill', reason: 'Certifying the report', fieldName: 'Certification' },
);
const certifiedBytes = certifying.Save();

const approving = Document.Open(certifiedBytes);
await approving.Sign(
  { certificate: approver.certificate, privateKey: approver.privateKey },
  { reason: 'Approved for publication', fieldName: 'Approval' },
);
approving.WriteTo('signed.pdf');

אימות חתימות

Document.VerifySignatures() בודק כל חתימה במסמך: הוא מחשב מחדש כל תקציר /ByteRange, מאמת את ה-CMS המנותק, ומדווח על מה השתנה לאחר כל חתימה. הוא מחזיר SignatureReport[], ערך אחד לכל חתימה.

const reports = await Document.OpenFile('signed.pdf').VerifySignatures();
for (const r of reports) {
  console.log(r.name, 'integrity:', r.integrity, 'signature:', r.signature);
}

טיפים ושיטות עבודה מומלצות

  • תפוס את InvalidPasswordError באופן ספציפי לפני תופסת כללית רחבה בעת פתיחת קלט שאינו מהימן, כך שתוכל להגיב בצורה שונה לסיסמה שגויה מאשר לקובץ פגום.
  • קרא ל-Certify() לפני כל קריאות Sign() — חתימת הסמכה קובעת את ההרשאות DocMDP שעליהן חתימות אישור מאוחרות מצורפות.
  • Document.Open() מחזיר Permissions משוחזרים לאחר פענוח במפתח ציבורי, אך הספרייה אינה אוכפת אותם בעצמה — התייחס אליהם כמידע.
  • VerifySignatures() הוא async — await אותו (או טיפול ב-Promise שהוחזר) לפני קריאת מערך הדוח.

בעיות נפוצות

בעיהסיבהתיקון
Document.OpenFile() / Document.Open() זורק InvalidPasswordErrorהמסמך מוגן בסיסמה ולא סופקה סיסמה, או שסופקה סיסמה שגויההעבר { password: '...' } אל Document.OpenFile() / Document.Open()
פענוח עם מפתח ציבורי נכשלהועבר מפתח פרטי או תעודה שגויים, או שאף אחד מהם אינו תואם לכל רשומת recipients שהייתה בשימוש בזמן ההצפנהאשר שהאפשרות recipient של privateKey / certificate (או חבילת PKCS#12) תואמת לאחד המקבלים המקוריים
חתימת אישור מבטלת את ההסמכהSign() נקראה עם הרשאות שהטרנספורם המאשר DocMDP אינו מאפשרקבע ערך permissions ב-Certify() (למשל 'form-fill') רחב מספיק לשינויים שהחתימות העתידיות יעשו
VerifySignatures() מדווח על בדיקת שלמות פגועההבייטים החתומים שונו לאחר החתימה, מחוץ לעדכון הדרגתי שהחתימה מכסהחתום מחדש על המסמך לאחר כל עריכה נוספת

FAQ

מה ההבדל בין Sign ל-Certify?

Certify() מוסיף את החתימה הראשונית, של האישור, וקובע (דרך שינוי DocMDP) אילו שינויים מאוחרים יותר מותר לבצע. Sign() מוסיף חתימה רגילה לאישור, המצורפת בצורה מצטברת על כל מה שהיה לפני זה.

איך פותחים קובץ PDF המוגן בסיסמה?

העבר את { password: '...' } ל-Document.OpenFile() או ל-Document.Open(), ותפוס את InvalidPasswordError אם הסיסמה עלולה להיות שגויה.

האם הספרייה הזו מחילה דגלי הרשאות של PDF?

לא. Document.Open() משחזר את דגלי Permissions ממסמך מוצפן כדי שתוכל לבדוק אותם, אך הוא עצמו לא מגביל מה הקוד שלך יכול לעשות עם המסמך הפתוח.

איך אני בודק אם החתימות של PDF חתום עדיין תקפות?

קרא ל-Document.VerifySignatures() (שיטה של async) ובדוק את השדות integrity ו-signature של כל SignatureReport שהוחזרו.


API Reference סיכום

מחלקה/מתודהתיאור
Document.OpenFile() / Document.Open()פתח מסמך, באפשרותו להיות מוגן בסיסמה או במפתח ציבורי
InvalidPasswordErrorנזרק כאשר סיסמה חסרה או שגויה
Document.Save() / Document.WriteTo()שמור מסמך, באפשרותך עם אפשרות encrypt
Permissionsדגלי הרשאות ששוחזרו ממסמך מוצפן
Document.Certify()הוסף חתימת תעודה (מחבר) עם שינוי DocMDP
Document.Sign()הוסף חתימת אישור
Document.VerifySignatures()אמת כל חתימה במסמך
SignatureReportתוצאת אימות של חתימה אחת: name, integrity, signature

ראה גם

 עברית