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 |