Security
Security
Trang này đề cập đến mật khẩu, mã hoá và chữ ký số. Document.OpenFile() / Document.Open() chấp nhận mật khẩu để mở tài liệu được bảo vệ, Document.Save() chấp nhận tùy chọn encrypt để bảo vệ một tài liệu, và Document.Sign() / Document.Certify() / Document.VerifySignatures() thêm và kiểm tra chữ ký số.
Mở và Giải Mã Tài Liệu Được Bảo Vệ Bằng Mật Khẩu
Gửi { password: '...' } tới Document.OpenFile() hoặc Document.Open() để mở tài liệu được bảo vệ bằng mật khẩu người dùng. Nếu mật khẩu thiếu hoặc sai, lời gọi sẽ ném ra 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;
}Mã hoá Khi Lưu
Document.Save() (và Document.WriteTo()) chấp nhận một tùy chọn encrypt. Mã hoá dựa trên mật khẩu là trường hợp phổ biến; thư viện cũng hỗ trợ public-key encryption cho một hoặc nhiều chứng chỉ người nhận, được mở lại bằng khóa riêng của người nhận.
// 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)
Ký và Chứng Nhận
Document.Certify() thêm một chữ ký chứng nhận (tác giả) mang theo một phép biến đổi DocMDP khai báo những thay đổi sau này được phép; Document.Sign() thêm một chữ ký phê duyệt thông thường khác có thể được thêm dần lên trên. Cả hai đều nhận một người ký { certificate, privateKey } và một đối tượng tùy chọn (reason, location, name, fieldName, và — cho 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');Xác minh chữ ký
Document.VerifySignatures() kiểm tra mọi chữ ký trong tài liệu: nó tính lại mỗi hàm băm /ByteRange, xác minh CMS tách rời, và báo cáo những gì đã thay đổi sau mỗi chữ ký. Nó trả về một SignatureReport[], mỗi mục cho một chữ ký.
const reports = await Document.OpenFile('signed.pdf').VerifySignatures();
for (const r of reports) {
console.log(r.name, 'integrity:', r.integrity, 'signature:', r.signature);
}Mẹo và Thực tiễn Tốt nhất
- Bắt
InvalidPasswordErrormột cách cụ thể trước một khối bắt chung rộng hơn khi mở đầu vào không đáng tin, để bạn có thể phản hồi khác nhau đối với mật khẩu sai so với tệp bị hỏng. - Gọi
Certify()trước bất kỳ lời gọiSign()nào — một chữ ký chứng nhận thiết lập các quyền DocMDP mà các chữ ký phê duyệt sau này được xếp lớp lên trên. Document.Open()trả vềPermissionsđã khôi phục sau khi giải mã bằng khóa công khai, nhưng thư viện không tự thực thi chúng — coi chúng là thông tin.VerifySignatures()làasync—awaitnó (hoặc xử lýPromiseđược trả về) trước khi đọc mảng báo cáo.
Các vấn đề thường gặp
| Vấn đề | Nguyên nhân | Sửa chữa |
|---|---|---|
Document.OpenFile() / Document.Open() ném InvalidPasswordError | Tài liệu được bảo vệ bằng mật khẩu nhưng không có mật khẩu nào được cung cấp, hoặc mật khẩu được cung cấp không đúng | Chuyển { password: '...' } tới Document.OpenFile() / Document.Open() |
| Giải mã bằng khóa công khai thất bại | Khóa riêng hoặc chứng chỉ sai đã được truyền, hoặc không có nào khớp với bất kỳ mục recipients nào được sử dụng khi mã hóa | Xác nhận tùy chọn recipient có privateKey / certificate (hoặc gói PKCS#12) khớp với một trong những người nhận gốc |
| Một chữ ký phê duyệt làm vô hiệu chứng nhận | Sign() đã được gọi với các quyền mà phép biến đổi DocMDP chứng nhận không cho phép | Đặt giá trị permissions trên Certify() (ví dụ: 'form-fill') đủ rộng cho các thay đổi mà những người ký sau sẽ thực hiện |
VerifySignatures() báo cáo kiểm tra toàn vẹn bị hỏng | Các byte đã ký đã bị thay đổi sau khi ký, nằm ngoài một bản cập nhật tăng dần mà chữ ký bao phủ | Ký lại tài liệu sau khi thực hiện các chỉnh sửa tiếp theo |
FAQ
Sự khác biệt giữa Sign và Certify là gì?
Certify() thêm chữ ký chứng nhận đầu tiên và khai báo (thông qua một phép biến đổi DocMDP) những thay đổi sau này được phép. Sign() thêm một chữ ký phê duyệt thông thường, được nối thêm một cách tăng dần lên trên bất kỳ gì đã có trước đó.
Làm sao để mở một tệp PDF được bảo vệ bằng mật khẩu?
Truyền { password: '...' } cho Document.OpenFile() hoặc Document.Open(), và bắt InvalidPasswordError nếu mật khẩu có thể sai.
Thư viện này có thực thi các cờ quyền PDF không?
Không. Document.Open() khôi phục các cờ Permissions từ tài liệu được mã hoá để bạn có thể kiểm tra, nhưng nó không tự hạn chế những gì mã của bạn có thể làm với tài liệu đã mở.
Làm sao tôi kiểm tra xem các chữ ký của PDF đã ký có còn hợp lệ không?
Gọi Document.VerifySignatures() (một phương pháp async) và kiểm tra các trường integrity và signature của mỗi SignatureReport được trả về.
API Reference Tóm tắt
| Lớp/Phương thức | Mô tả |
|---|---|
Document.OpenFile() / Document.Open() | Mở một tài liệu, tùy chọn được bảo vệ bằng mật khẩu hoặc khóa công khai |
InvalidPasswordError | Ném ra khi mật khẩu bị thiếu hoặc sai |
Document.Save() / Document.WriteTo() | Lưu một tài liệu, tùy chọn với một tùy chọn encrypt |
Permissions | Khôi phục các cờ quyền từ một tài liệu được mã hóa |
Document.Certify() | Thêm chữ ký chứng nhận (tác giả) với một DocMDP transform |
Document.Sign() | Thêm chữ ký phê duyệt |
Document.VerifySignatures() | Xác minh mọi chữ ký trong tài liệu |
SignatureReport | Kết quả xác minh của một chữ ký: name, integrity, signature |