ปักเป้าเป็นอัลกอริธึมการเข้ารหัสบล็อกสมมาตรและเข้ารหัสข้อมูลการบล็อก 64 บิตในแต่ละครั้ง มันติดตามเครือข่าย Feistel และขั้นตอนการทำงานของอัลกอริธึมนี้แบ่งออกเป็นสองส่วน
-
การสร้างคีย์ย่อย − กระบวนการนี้แปลงคีย์ที่มีความยาวไม่เกิน 448 บิตเป็นคีย์ย่อยที่เพิ่ม 4168 บิต
-
การเข้ารหัสข้อมูล − ในกระบวนการเข้ารหัสข้อมูล จะวนซ้ำ 16 ครั้งของเครือข่าย แต่ละรอบประกอบด้วยการเรียงสับเปลี่ยนที่ขึ้นกับคีย์ และการแทนที่ที่ขึ้นกับคีย์และข้อมูล การดำเนินการในอัลกอริทึมคือ XOR หรือเพิ่มเติมในคำแบบ 32 บิต การดำเนินการเพิ่มเติมเพียงอย่างเดียวคือการค้นหาข้อมูลอาร์เรย์ที่จัดทำดัชนีสี่รายการต่อรอบ
ให้เราพูดถึงสองส่วนนี้ดังนี้ −
-
การสร้างคีย์ย่อย − อัลกอริธึมการเข้ารหัสปักเป้าใช้คีย์ย่อยจำนวนมาก คีย์เหล่านี้กำลังสร้างก่อนการเข้ารหัสข้อมูลหรือการถอดรหัส
p-array ประกอบด้วยคีย์ย่อย 18 บิต 32 บิต -
P1,P2,………….,P18.
S-Box แบบ 32 บิตมีสี่กล่อง แต่ละรายการมี 256 รายการ -
S1,0, S1,1,……….. S1,255
S2,0, S2,1,……….. S2,255
S3,0, S3,1,……….. S3,255
S4,0, S4,1,…………... S4,255
ขั้นตอนในการสร้างคีย์ย่อย
-
เริ่มต้นก่อน นั่นคือ P-array และดังนั้น S-box สี่กล่อง ตามลำดับ ด้วยสตริงคงที่และสตริงนี้ยังมีเลขฐานสิบหกของ π ด้วย
P1=0x243f6a88, P2=0x85a308d3, P3=0x13198a2e, P4=0x3707344 เป็นต้น
-
XOR P1 พร้อมคีย์ 32 บิตแรก XOR P2 พร้อมวินาทีซึ่งเป็นคีย์ 32 บิต ฯลฯ สำหรับบิตของคีย์ทั้งหมด (อาจสูงถึง P14) วนซ้ำขั้นตอนผ่านคีย์บิตจนกว่า P-array ทั้งหมดจะได้รับ XORed ด้วยคีย์บิต (สำหรับแต่ละคีย์ลัด จะมีคีย์ที่ยาวกว่าบางส่วนที่เทียบเท่ากันบางส่วน ตัวอย่างเช่น หากคีย์ A เป็นคีย์ 64 บิต คีย์ AA, AAA ฯลฯ จะเป็นคีย์เดียวกัน)
-
มันสามารถเข้ารหัสสตริงที่เป็นศูนย์ทั้งหมดด้วยอัลกอริธึม Blowfish โดยใช้คีย์ย่อยที่กำหนดไว้ในขั้นตอนที่ 1 และขั้นตอนที่ 2
-
สามารถกู้คืน P1 และ P2 ด้วยเอาต์พุต 64 บิตของขั้นตอนที่ (3)
-
สามารถเข้ารหัสเอาต์พุตของขั้นตอนที่ (3) โดยใช้อัลกอริทึมกับคีย์ย่อยที่เปลี่ยนแปลง
-
สามารถคืนค่า P3 และ P4 ด้วยผลลัพธ์ของขั้นตอนที่ (5)
-
สามารถใช้เพื่อดำเนินการตามขั้นตอน กู้คืนรายการทั้งหมดของอาร์เรย์ P และจากนั้นกล่อง S ทั้งสี่ตามลำดับด้วยเอาต์พุตของอัลกอริธึมที่เปลี่ยนแปลงอย่างต่อเนื่อง
-
-
จำเป็นต้องทำซ้ำทั้งหมด 521 ครั้งเพื่อสร้างคีย์ย่อยที่จำเป็นทั้งหมด แอปพลิเคชันสามารถบันทึกคีย์ย่อยแทนที่จะดำเนินการตามกระบวนการที่มานี้หลายครั้ง
-
การเข้ารหัสข้อมูล − ปักเป้าเป็นเครือข่าย Feistel รวม 16 รอบ
อินพุตเป็นองค์ประกอบข้อมูล 64 บิต x.
แบ่ง x ออกเป็นสองส่วน 32 บิต :xL , xR .
จากนั้น สำหรับ i =1 ถึง 16;
xล =xL XOR Pผม
xR =F(xL ) XOR xR
สลับ xL และ xR
หลังวันที่ 16 th รอบ สลับ xL และ xR อีกครั้งเพื่อเลิกทำการสลับครั้งล่าสุด
จากนั้น ciphertext =การต่อกันของ xL และ xR , xR =xR XOR P17 และ xL =xL XOR P18 .
สุดท้าย รวม xL . อีกครั้ง และ xR เพื่อรับรหัสลับ การถอดรหัสเทียบเท่ากับการเข้ารหัส ยกเว้น P1, P2,……P18 ถูกใช้ในลำดับที่กลับกัน