PDFium Delphi Component Docs

หน่วย FPdfAes

Unit: FPdfAes
block cipher AES-128 และ AES-256 แบบ pure-Pascal พร้อม key expansion การเข้ารหัส/ถอดรหัสบล็อกเดี่ยว และ stream wrapper โหมด AES-256-CBC ที่ใช้โดยตัวจัดการการเข้ารหัส PDF

Syntax

TAesBlock = array[0..15] of Byte;
TAes128Key = array[0..15] of Byte;
TAes128ExpandedKey = array[0..175] of Byte;
TAes256Key = array[0..31] of Byte;
TAes256ExpandedKey = array[0..239] of Byte;

procedure Aes128KeyExpansion(const Key: TAes128Key; var Expanded: TAes128ExpandedKey);
procedure Aes128EncryptBlock(const Expanded: TAes128ExpandedKey;
  const Input: TAesBlock; var Output: TAesBlock);
procedure Aes256KeyExpansion(const Key: TAes256Key; var Expanded: TAes256ExpandedKey);
procedure Aes256EncryptBlock(const Expanded: TAes256ExpandedKey;
  const Input: TAesBlock; var Output: TAesBlock);
procedure Aes256DecryptBlock(const Expanded: TAes256ExpandedKey;
  const Input: TAesBlock; var Output: TAesBlock);
function Aes256CbcEncryptPKCS7(const Key: TAes256Key; const IV: TAesBlock;
  const Plain: TBytes): TBytes;
function Aes256CbcEncryptNoPad(const Key: TAes256Key; const IV: TAesBlock;
  const Plain: TBytes): TBytes;
function Aes256CbcDecryptPKCS7(const Key: TAes256Key; const IV: TAesBlock;
  const Cipher: TBytes): TBytes;
function Aes256CbcDecryptNoPad(const Key: TAes256Key; const IV: TAesBlock;
  const Cipher: TBytes): TBytes;
function Aes256KeyWrap(const Key: TAes256Key;
  const PlainKeyData: TBytes): TBytes;
function Aes256KeyUnwrap(const Key: TAes256Key; const Wrapped: TBytes;
  out PlainKeyData: TBytes): Boolean;
procedure AesGenerateRandomBytes(Buffer: Pointer; Count: Integer);

Description

FPdfAes เป็นการ implement AES ที่ไม่ต้องพึ่ง dependency ภายนอก เพื่อให้ PDFium Delphi Component เข้ารหัสและถอดรหัส stream ของ PDF บน Delphi, C++Builder และ Free Pascal ได้โดยไม่ต้องพึ่งไลบรารี crypto ภายนอก โดยถูกใช้งานโดย security handler AES-256 ของ PDF ใน FPdfEncrypt และโดยโหมด GCM ใน FPdfAesGcm

primitive ระดับบล็อกทำงานกับบล็อกขนาด 16 ไบต์คงที่ผ่าน round key ที่ขยายแล้ว ส่วน CBC wrapper จัดการ PKCS#7 padding หรือไม่มี padding กับอาร์เรย์ไบต์ความยาวผันแปร ตรงกับโหมดการเข้ารหัส stream สองแบบที่ข้อกำหนด PDF กำหนดไว้

AesGenerateRandomBytes เติมบัฟเฟอร์ด้วยไบต์สุ่มระดับ cryptographic สำหรับใช้เป็น IV, salt และ key

Functions

FunctionDescription
Aes128KeyExpansionขยาย key ขนาด 128 บิตให้เป็น round-key schedule ขนาด 176 ไบต์
Aes128EncryptBlockเข้ารหัสบล็อกขนาด 16 ไบต์หนึ่งบล็อกด้วย key AES-128 ที่ขยายแล้ว
Aes256KeyExpansionขยาย key ขนาด 256 บิตให้เป็น round-key schedule ขนาด 240 ไบต์
Aes256EncryptBlockเข้ารหัสบล็อกขนาด 16 ไบต์หนึ่งบล็อกด้วย key AES-256 ที่ขยายแล้ว
Aes256DecryptBlockถอดรหัสบล็อกขนาด 16 ไบต์หนึ่งบล็อกด้วย key AES-256 ที่ขยายแล้ว
Aes256CbcEncryptPKCS7เข้ารหัสอาร์เรย์ไบต์ในโหมด CBC ด้วย PKCS#7 padding
Aes256CbcEncryptNoPadเข้ารหัสอาร์เรย์ไบต์ในโหมด CBC โดยไม่มี padding (ความยาวอินพุตต้องเป็นจำนวนเท่าของบล็อก)
Aes256CbcDecryptPKCS7ถอดรหัส ciphertext แบบ CBC และตัด PKCS#7 padding ออก
Aes256CbcDecryptNoPadถอดรหัส ciphertext แบบ CBC โดยไม่ตัด padding ออก
Aes256KeyWrapห่อหุ้ม key data ด้วย AES-256 โดยใช้การปกป้องความถูกต้องตาม RFC 3394
Aes256KeyUnwrapตรวจสอบและคลาย key data แบบ RFC 3394 โดยไม่คืน plaintext เมื่อ integrity ล้มเหลว
AesGenerateRandomBytesเติมบัฟเฟอร์ด้วยไบต์สุ่มระดับ cryptographic

Constants

ConstantValueDescription
AES_BLOCK_SIZE16ขนาดบล็อกของ AES เป็นไบต์
AES128_KEY_SIZE16ขนาด key ของ AES-128 เป็นไบต์
AES128_ROUND_KEY_SIZE176ขนาด round key ที่ขยายแล้วของ AES-128 เป็นไบต์
AES256_KEY_SIZE32ขนาด key ของ AES-256 เป็นไบต์
AES256_ROUND_KEY_SIZE240ขนาด round key ที่ขยายแล้วของ AES-256 เป็นไบต์

Remarks

See Also

FPdfAesGcm, FPdfEncrypt