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 InvalidPasswordError mộ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ọi Sign() 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 — await nó (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ânSửa chữa
Document.OpenFile() / Document.Open() ném InvalidPasswordErrorTà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 đúngChuyển { password: '...' } tới Document.OpenFile() / Document.Open()
Giải mã bằng khóa công khai thất bạiKhó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óaXá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ậnSign() đã đượ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ỏngCá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ứcMô 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
InvalidPasswordErrorNé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
PermissionsKhô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
SignatureReportKết quả xác minh của một chữ ký: name, integrity, signature

Xem thêm

 Tiếng Việt