ฟังก์ชันแฮชการเข้ารหัสส่วนใหญ่จะประมวลผลข้อมูลเป็นบล็อกขนาดหลายไบต์ เนื่องจากวิธีนี้มีประสิทธิภาพมากกว่า สำหรับอัลกอริทึมที่ใช้คำ 32 บิต เช่น MD5 และ SHA-256 มักมีขนาด 64 ไบต์ สำหรับอัลกอริทึมที่ใช้คำ 64 บิต เช่น SHA-512 หรือ BLAKE2b มักเป็นบล็อกขนาด 128 ไบต์ และ SHA-3 ยังแตกต่างออกไป
ฟังก์ชันแฮชแต่ละฟังก์ชันประกอบด้วยฟังก์ชันการบีบอัด ซึ่งนำสถานะแฮชก่อนหน้า (หรือสถานะเริ่มต้นที่จุดเริ่มต้น) และบล็อกข้อมูลมารวมกันเป็นสถานะใหม่ ฟังก์ชันการบีบอัดนี้มีจำนวนรอบที่แน่นอน จำนวนรอบเท่ากันในแต่ละบล็อก จากนั้น หลังจากบล็อกสุดท้ายได้รับการประมวลผล ค่าแฮชจะถูกแยกออกจากสถานะ ซึ่งในหลายกรณีเป็นเพียงสำเนาของข้อมูลสถานะทั้งหมดหรือบางส่วน
ในฟังก์ชัน Merkle-DÃ¥mgard เช่น MD5, SHA-256 และ SHA-512 การเติมจะทำด้วยสองชิ้น ขั้นแรกให้คำนวณความยาวของข้อมูลเป็นบิต ในฟังก์ชัน 32 บิต เช่น MD5 และ SHA-256 โดยปกติจะเป็นค่า 64 บิต (8 ไบต์) ในฟังก์ชัน 64 บิต โดยปกติจะเป็นค่า 128 บิต (16 ไบต์) ข้อมูลถูกเสริมให้เพิ่ม 1 บิต จากนั้นเพิ่ม 0 บิตได้มากเท่าที่จำเป็นเพื่อให้เหลือพื้นที่ว่างสำหรับความยาว ดังนั้นสำหรับ MD5 หรือ SHA-256 ข้อความขนาด 55 ไบต์จะมี 1 บิต 7 บิต 0 และตามด้วยความยาว อย่างไรก็ตาม ข้อความขนาด 56 ไบต์จะมีหนึ่ง 1 บิต หกสิบสาม 0 บิตเพื่อย่อส่วนบล็อก จากนั้นอีกสี่ร้อยสี่สิบแปด 0 บิตเพื่อรองบล็อกถัดไป จากนั้นตามด้วยความยาว เนื่องจากไม่มีช่องว่าง สำหรับทั้ง 1 บิตและความยาวในบล็อกปัจจุบัน อัลกอริทึมแฮชที่แตกต่างกันจะแตกต่างกัน SHA-3 และ BLAKE2b ต่างก็ใช้เทคนิคที่แตกต่างกันไปกว่านี้
สำหรับรอบ มีสามประเภทที่แตกต่างกันของรอบที่เรามักจะพูดถึงเมื่อประมวลผลบล็อกในฟังก์ชันการบีบอัด มีหลายรอบ เช่นใน MD5 และ BLAKE2b ที่เราประมวลผลแต่ละข้อความหนึ่งครั้งต่อรอบ MD5 มีสี่รอบดังกล่าว และ BLAKE2b มี 12 รอบ นอกจากนี้ยังมีอัลกอริธึม เช่น SHA-256 และ SHA-512 ที่ข้อความในบล็อกขยายเป็นลำดับของคำจำนวนมาก (64 และ 80 ตามลำดับ) และแต่ละรอบ จัดการหนึ่งในคำขยายเหล่านี้ ใน SHA-3 เราดำเนินการกับทั้งรัฐด้วยข้อมูลที่ XORed อยู่แล้ว และแต่ละรอบดำเนินการกับทั้งรัฐ
ในทางปฏิบัติแล้ว แทบไม่มีใครใช้ข้อความที่ไม่ใช่จำนวนไบต์รวม เนื่องจากมักไม่สะดวกในการทำงานบนฮาร์ดแวร์จริง แต่สำหรับ MD5 หรือ SHA-256 ข้อความ 100 บิตจะถูกเสริมด้วย 0 บิต 1 บิต สามร้อยสี่สิบเจ็ด (เพื่อให้เป็น 448 บิต) จากนั้นความยาว 64 บิตจะถูกต่อท้ายเพื่อเติมบล็อกสุดท้าย ( 512 บิต หรือ 64 ไบต์)
ในขณะที่คุณถามเกี่ยวกับ MD5 เป็นพิเศษ ฉันได้กล่าวถึงอัลกอริทึมอื่นๆ หลายรายการที่นี่ เนื่องจากอัลกอริทึมแตกต่างกันในหลายๆ วิธีที่สำคัญ และไม่ควรใช้ MD5 อีกต่อไป ดังนั้นวิธีการทำงานของอัลกอริทึมที่ปลอดภัยกว่าจะแตกต่างกัน