Skip to content

Mã hóa (HasSecurity)

Trait HasSecurity trên Document cung cấp mã hóa AES-256 qua engine Aes256Encryptor. TCPDF-Next chỉ implement security handler PDF 2.0 (AESV3, Revision 6, V5) — RC4 và AES-128 bị loại bỏ có chủ đích. Mật khẩu được chuẩn hóa qua SASLprep (RFC 4013) để xử lý Unicode đúng, và key derivation dùng Algorithm 2.B (iterative SHA-256/384/512).

Bật mã hóa

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->setProtection(
        permissions: ['print', 'copy'],
        userPass: 'reader-password',
        ownerPass: 'owner-secret-password',
    )
    ->addPage()
    ->setFont('Helvetica', '', 12)
    ->cell(0, 10, 'This PDF is AES-256 encrypted', newLine: true)
    ->save('encrypted.pdf');

Mật khẩu User và Owner

  • User password — người đọc phải nhập mật khẩu này để mở và xem PDF. Khi trống, document mở không cần prompt nhưng hạn chế quyền vẫn áp dụng.
  • Owner password — cấp truy cập đầy đủ, bỏ qua mọi hạn chế quyền. Khi trống, owner password ngẫu nhiên 32 byte được tạo nội bộ.

Cả hai mật khẩu được chuẩn hóa qua SASLprep (RFC 4013) trước key derivation. Điều này đảm bảo mật khẩu Unicode như "Pässwörd" được xử lý nhất quán trên mọi trình xem PDF.

Cờ quyền

Truyền bất kỳ tổ hợp cờ chuỗi nào trong mảng $permissions:

CờMô tả
printCho phép in (độ phân giải thấp)
modifyCho phép sửa đổi nội dung
copyCho phép trích xuất văn bản và hình ảnh
annotateCho phép thêm chú thích
fill-formsCho phép điền trường form
extractCho phép trích xuất trợ năng
assembleCho phép chèn, xoay và xóa trang
print-highresCho phép in độ phân giải cao

Khi $permissions trống, mọi thao tác bị hạn chế (cần owner password cho bất kỳ action nào).

Kiến trúc bảo mật

TCPDF-Next thực thi chuẩn mã hóa PDF mạnh nhất:

  • Algorithm: AES-256-CBC (AESV3), Revision 6, V5
  • Key length: 256 bit
  • Không legacy: RC4 và AES-128 bị loại bỏ có chủ đích

Không tương thích PDF/A

Mã hóa không được phép trong tài liệu tuân thủ PDF/A. Nếu bạn gọi setProtection() trên document đã bật chế độ PDF/A, PdfAException sẽ được throw.

Ví dụ đầy đủ

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->setTitle('Confidential Report')
    ->setAuthor('Security Team')
    ->setProtection(
        permissions: ['print-highres', 'copy'],
        userPass: 'open-me',
        ownerPass: 'full-access-2026',
    )
    ->addPage()
    ->setFont('Helvetica', 'B', 18)
    ->cell(0, 15, 'Confidential Report', newLine: true)
    ->setFont('Helvetica', '', 12)
    ->multiCell(0, 6, 'This document is protected with AES-256 encryption. '
        . 'Readers can print and copy, but cannot modify or annotate.')
    ->save('confidential-report.pdf');

Phân phối theo giấy phép LGPL-3.0-or-later.