Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

การดำเนินการของอัลกอริทึม Blowfish

สองส่วนหลักของ Blowfish

1. Subkey Generation (Key Expansion)

  • รับกุญแจ 32-448 บิต → สร้าง Subkeys 4168 ไบต์ (P-array 18 + S-boxes 4×256)
  • ขั้นตอน: Init π → XOR Key → Encrypt Zero 521 รอบ → เติม P, S
  • อ็อปเปอเรเตอร์: XOR, Addition mod 2³², Table Lookup

2. Data Encryption (Feistel 16 รอบ)

Input: 64 บิต x → แบ่ง xL, xR (32 บิต)

for i = 1 to 16:
    xL = xL ⊕ Pᵢ
    xR = F(xL) ⊕ xR
    Swap(xL, xR)
Swap(xL, xR)  // Undo last swap
xR = xR ⊕ P17
xL = xL ⊕ P18
Ciphertext = xL || xR

F-Function (Core of Blowfish)

รับ xL 32 บิต → แบ่ง 4 ไบต์: a, b, c, d

F(xL) = ((S1[a] + S2[b] mod 2³²) ⊕ S3[c]) + S4[d] mod 2³²
  • S1-S4: Key-dependent S-boxes (256 entries × 32 บิต)
  • ใช้ Addition mod 2³² และ XOR

การถอดรหัส

ใช้ โค้ดเดียวกัน แต่ P-array เรียงย้อนกลับ: P18, P17, ..., P1

คุณสมบัติการดำเนินการ

ลักษณะรายละเอียด
Block Size64 บิต
Key Size32-448 บิต (ผันผวน)
Rounds16
StructureFeistel (Modified: both halves modified)
OperationsXOR, ADD mod 2³², Table Lookup (S-box)
SubkeysP1-P18, S1[0..255]-S4[0..255]
Key Expansion521 Encryptions (Slow by design)