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

อัลกอริทึม MD5 ทำงานอย่างไร


มีการดำเนินการตามขั้นตอนต่อไปนี้เพื่อคำนวณการสรุปข้อความของธีมซึ่งมีดังต่อไปนี้ -

  • ขั้นตอนที่ 1 - ต่อท้าย padding bits − ข้อความถูกต่อหรือเสริมด้วยวิธีการที่ความยาวรวมเป็นบิตเท่ากันกับ 448 โมดูโล 512 การดำเนินการนี้จะดำเนินการอย่างต่อเนื่องแม้ว่าความยาวของข้อความเป็นบิตเดิมจะเท่ากันกับ 448 โมดูโล 512 448 + 64 =512 ดังนั้นข้อความจึงมีการเสริมเพื่อให้ความยาวเป็น 64 บิตน้อยกว่าทวีคูณของจำนวนเต็มของ 512

  • ขั้นตอนที่ 2 - ต่อท้ายความยาว − เพิ่มคำอธิบาย 64 บิตของความยาวเป็นบิตของข้อความต้นฉบับ M (ก่อนแทรกบิตการเติม) ลงในผลลัพธ์ของขั้นตอนที่ 1 หากความยาวของข้อความต้นฉบับสูงกว่า 264 =184 467 440 73 709 551 616 ดังนั้นจึงใช้เฉพาะความยาวของข้อความ M ขั้นต่ำ 64 บิตเท่านั้น

    ดังนั้น ฟิลด์นี้จึงรวมความยาวของข้อความต้นฉบับ M modulo 264 บิตเหล่านี้ถูกเพิ่มเป็นคำ 32 บิตสองคำ และเพิ่มคำลำดับต่ำ (มีความสำคัญน้อยที่สุด) ก่อน ผลลัพธ์ของขั้นตอนที่ 1 และขั้นตอนที่ 2 เป็นข้อความที่มีความยาวใน บิตที่เป็นจำนวนเต็มหลาย 512 บิต

  • ขั้นตอนที่ 3 - เริ่มต้นบัฟเฟอร์ MD - สามารถใช้บัฟเฟอร์ 128 บิตเพื่อเก็บผลลัพธ์ขั้นกลางและสุดท้ายของอัลกอริทึมแฮช MD5 สามารถใช้บัฟเฟอร์สี่คำ (A, B, C และ D) เพื่อประเมินการสรุปข้อความได้ ดังนั้น A, B, C, D แต่ละตัวจึงเป็นรีจิสเตอร์แบบ 32 บิต

    รีจิสเตอร์เหล่านี้สามารถบู๊ตได้ถึงค่าต่อไปนี้ในไบต์ฐานสิบหกและลำดับต่ำก่อน -

    คำ A:01 23 45 67

    Word B:89 ab cd ef

    Word C:fe dc ba 98

    Word D:76 54 32 10

  • ขั้นตอนที่ 4 - ประมวลผลข้อความในบล็อก 512 บิต (16 คำ) − ฟังก์ชันการบีบอัดประกอบด้วยการประมวลผลสี่รอบ แต่ละรอบจะสร้างอินพุตสำหรับบล็อก 512 บิตปัจจุบันที่กำลังประมวลผล (Yq ) และค่าบัฟเฟอร์ 128 บิต ABCD และอัปเดตองค์ประกอบของบัฟเฟอร์

    สามารถอธิบายฟังก์ชันเสริมสี่อย่างที่แต่ละคำสร้างเป็นอินพุตสามคำ 32 บิต และสร้างเป็นเอาต์พุตคำ 32 บิตหนึ่งคำ

    F (X, Y, Z) =XY ไม่ใช่ (X) Z

    G (X, Y, Z) =XZ v Y ไม่ใช่ (Z)

    H (X, Y, Z) =X xor Y xor Z

    I (X, Y, Z) =Y xor (X v not (Z))

    ในแต่ละตำแหน่งบิต F ทำหน้าที่เป็นเงื่อนไข:ถ้า X แล้ว Y อื่น Z ฟังก์ชัน F สามารถแสดงโดยใช้ + แทน v เนื่องจาก XY และไม่ใช่ X(Z) จะไม่มีวันมี 1 ในตำแหน่งบิตที่คล้ายกัน

  • ขั้นตอนที่ 5 - เอาท์พุต ย่อยข้อความสร้างเอาต์พุตรวมถึง A, B, C, D ผลลัพธ์จากรอบสุดท้ายคือผลลัพธ์แฮช 128 บิตหรือไดเจสต์ข้อความที่สามารถรับได้หลังจากประมวลผลข้อความทั้งหมด t บล็อก 512 บิตที่เพิ่มขึ้น .