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 digest, επαληθεύει το αποσπασμένο 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ειδικά πριν από ένα γενικό catch-all κατά το άνοιγμα μη αξιόπιστης εισόδου, ώστε να μπορείτε να αντιδράτε διαφορετικά σε έναν εσφαλμένο κωδικό πρόσβασης από ό,τι σε ένα κατεστραμμένο αρχείο. - Κλήστε το
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() αναφέρει αποτυχημένο έλεγχο ακεραιότητας | Τα υπογεγραμμένα bytes τροποποιήθηκαν μετά την υπογραφή, εκτός μιας διαδοχικής ενημέρωσης που καλύπτει η υπογραφή | Υπογράψτε ξανά το έγγραφο μετά από τυχόν περαιτέρω επεξεργασίες |
FAQ
Ποια είναι η διαφορά μεταξύ Υπογραφής και Πιστοποίησης;
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 | Ανακτήθηκαν οι flags δικαιωμάτων από ένα κρυπτογραφημένο έγγραφο |
Document.Certify() | Προσθέστε μια υπογραφή πιστοποίησης (συγγραφέα) με μια μετατροπή DocMDP |
Document.Sign() | Προσθέστε μια υπογραφή έγκρισης |
Document.VerifySignatures() | Επαληθεύστε κάθε υπογραφή στο έγγραφο |
SignatureReport | Αποτέλεσμα επαλήθευσης μιας υπογραφής: name, integrity, signature |