ความยาวสูงสุดสำหรับอินพุต / เอาต์พุต MD5


164

ความยาวสูงสุดของสตริงที่สามารถ hashed md5 คืออะไร หรือ: หากไม่มีข้อ จำกัด และหากเป็นเช่นนั้นความยาวสูงสุดของค่าเอาต์พุต md5 คือเท่าใด


2
ติดตาม wiki: en.wikipedia.org/wiki/MD5
Frank

คำตอบ:


240

MD5 ประมวลผลข้อความที่มีความยาวตามอำเภอใจเป็นเอาท์พุทที่มีความยาวคงที่ 128 บิตโดยทั่วไปจะแสดงเป็นลำดับเลขฐานสิบหก 32 หลัก


95
หมายเหตุถึงตัวเอง: MD5 hash length = 128 bits= 16 bytes=32 hex digits
เช็คซัม

2
[แก้ไขปกติ] ตัวเลขฐานสิบหก 32 และสตริงมีเพียงคำจาก 'az' และตัวเลขจาก '0-9'
v1h5

1
ฉันสังเกตเห็นข้อผิดพลาดเล็กน้อยในความคิดเห็นก่อนหน้า ข้อความควรอ้างอิงตามนี้ :) "ตัวเลขฐานสิบหก 32 ตัวและสตริงมีเพียงตัวอักษรจาก 'az' และตัวเลขจาก '0-9'"
Remis B

2
@Shafizadeh ตามที่ระบุคำตอบอินพุตมีความยาวตามอำเภอใจ หมายความว่าพารามิเตอร์สามารถมีความยาวได้ตามที่คุณต้องการ
kdojeteri

1
@Peping การแก้ไขเล็ก ๆ : อินพุตอาจยาวได้ตามประเภทข้อมูลที่ใช้ในภาษาการเขียนโปรแกรมที่ใช้ ตัวอย่าง: สตริงของ Java ใช้อาร์เรย์ภายในดังนั้นสตริงสามารถมีได้เฉพาะ (2 ^ 31) -1 ตัว (หรือน้อยกว่านั้นขึ้นอยู่กับขนาดฮีป) นอกจากนี้ยังเป็นอินพุตสูงสุดสำหรับฟังก์ชัน MD5 ใน Java แต่ด้วยเหตุผลทางทฤษฎีฟังก์ชั่น MD5 สามารถประมวลผลอินพุตที่มีความยาวตามอำเภอใจได้ ;)
RicoBrassers

38
  • ความยาวของข้อความเป็นไม่ จำกัด

ผนวกความยาว

การเป็นตัวแทน 64 บิตของ b (ความยาวของข้อความก่อนที่จะเพิ่มบิตแพ็ดดิ้ง) จะถูกผนวกเข้ากับผลลัพธ์ของขั้นตอนก่อนหน้า ในเหตุการณ์ที่ไม่น่าเป็นไปได้ที่ b มากกว่า 2 ^ 64 ดังนั้นจึงใช้เฉพาะบิต 64 บิตที่มีลำดับต่ำ

  • แฮชจะเป็น 128 บิตเสมอ หากคุณเข้ารหัสเป็นสตริงเลขฐานสิบหกคุณสามารถเข้ารหัส 4 บิตต่อตัวอักษรโดยกำหนดเป็น 32 อักขระ
  • MD5 ไม่ใช่การเข้ารหัส คุณไม่สามารถ "ถอดรหัส" แฮช MD5 ทั่วไปเพื่อรับสตริงต้นฉบับได้

ดูเพิ่มเติมได้ที่นี่


ความยาวของข้อความไม่ จำกัดคุณหมายถึงข้อความใด มันเป็นอินพุตหรือไม่ คำถามของฉันคือMD5("how many characters exactly?");
Shafizadeh

@Shafizadeh อินพุตของคุณอาจยาวที่สุดในภาษาการเขียนโปรแกรมปัจจุบันของคุณใน Java ซึ่งจะเป็น (2 ^ 31) -1 อักขระในสตริง และใช่ "ข้อความ" คืออินพุต
RicoBrassers

@Shafizadeh ... หรือจากไฟล์อินพุตอาจมีขนาดใหญ่เท่าที่เก็บข้อมูลที่มีอยู่
ToolmakerSteve

9

คุณสามารถมีความยาวได้ แต่แน่นอนว่าอาจมีปัญหาเกี่ยวกับหน่วยความจำในคอมพิวเตอร์หากอินพุต String ยาวเกินไป ผลลัพธ์จะเป็น 32 อักขระเสมอ


4
หากอินพุตสตริงยาวเกินไปจะไม่มีอยู่ในระบบในตอนแรกยกเว้นว่าอยู่ในไฟล์ซึ่งในกรณีนี้คุณสามารถส่งผ่านบล็อกไปยังฟังก์ชั่นย่อยตามที่พวกเขาอ่านหรือกล่าวอีกนัยหนึ่งคุณเพียงต้องการ มีblockไบต์ของอินพุตพร้อมกัน
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

6

อัลกอริทึมได้รับการออกแบบมาเพื่อรองรับความยาวอินพุตโดยพลการ นั่นคือคุณสามารถคำนวณแฮชของไฟล์ขนาดใหญ่เช่น ISO ของ DVD ...

หากมีข้อ จำกัด สำหรับอินพุตอาจมาจากสภาพแวดล้อมที่ใช้ฟังก์ชันแฮช สมมติว่าคุณต้องการคำนวณไฟล์และสภาพแวดล้อมมีขีด จำกัด MAX_FILE

แต่สตริงเอาต์พุตจะเหมือนกันเสมอ: 32 hex chars (128 bits)!



4

คุณอาจต้องการใช้SHA-1แทนMD5เนื่องจาก MD5 นั้นถือว่าใช้งานไม่ได้

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับช่องโหว่ MD5 ในบทความวิกิพีเดียนี้


5
นี่ไม่ใช่แค่ข่าวลือ MD5 นั้นดีพอสำหรับงานพัฒนาเว็บตามปกติ
Common Sense ของคุณ

11
ผู้สร้างรวมถึง Bruce Schneier และ Homeland Security ตกลงกันว่ามันพัง ... คุณต้องการ 'การตีความข่าวลือ' อีกกี่ครั้งในการโน้มน้าวใจคุณว่าจริง ๆ แล้วมันถูกทำลายไปสักพักแล้ว? ความจริงก็คือมันเป็นเรื่องง่ายที่จะหาอินพุตที่สร้างแฮชที่ต้องการโดยพลการ แน่นอนคุณสามารถลดความเสี่ยงนี้ได้โดยการใส่เกลือของคุณโดยใช้เกลือที่มีขนาดใหญ่พอสมควร จากหมายเหตุด้านข้าง: SHA-1 นั้นถือว่าพังแล้ว หากคุณแนะนำคนที่จะอัพเกรดโปรดแนะนำพวกเขาให้อัปเกรดเป็น SHA-2 ได้โปรด
เดอร์

3
@ Kander โอ้ฉันต้องการน้อยมาก ตัวอย่าง. รับแฮชคุณจะต้องนำซอร์สสตริงหรือไม่ ไม่ใช่ลิงก์ไปยังบทความที่ยอดเยี่ยมไม่ใช่ความเห็นของใครบางคน แต่เป็นเพียงแค่ซอร์สสตริงใช่ไหม
สามัญสำนึกของคุณ

2
ไม่มีใครพูดถึงสิ่งที่พวกเขาหมายถึงจริงๆภายใต้คำว่า "แตกหัก" แม้ว่า @YourCommonSense จะเข้าท่า
JSmyth

4
คุณกำลังพูดถึงการใช้ความปลอดภัยของ MD5 แต่ MD5 (หรือเทคนิคการแฮ็กอื่น ๆ ) มีการใช้งานอื่น ๆ มากมาย ฉันต้องการใช้มันเพื่อเปลี่ยนชื่อไฟล์ด้วยแฮช ฉันไม่ได้กังวลเกี่ยวกับความต้านทานการชนของ MD5 ทุกสิ่งที่คุณโพสต์ยังคงเป็นจริงแค่ 2 เซ็นต์ของฉัน
tfrascaroli

3

ไม่มีการ จำกัด อินพุตของ md5 ที่ฉันรู้ การนำไปใช้งานบางอย่างต้องการอินพุตทั้งหมดเพื่อโหลดลงในหน่วยความจำก่อนที่จะส่งผ่านไปยังฟังก์ชัน md5 (เช่นการนำไปใช้ทำหน้าที่ในบล็อกหน่วยความจำไม่ใช่สตรีม) แต่นี่ไม่ใช่ข้อ จำกัด ของอัลกอริธึมเอง ผลลัพธ์จะเป็น 128 บิตเสมอ โปรดทราบว่า md5 ไม่ใช่อัลกอริทึมการเข้ารหัส แต่เป็นแฮชการเข้ารหัส ซึ่งหมายความว่าคุณสามารถใช้เพื่อยืนยันความถูกต้องของข้อมูลจำนวนหนึ่ง แต่คุณไม่สามารถย้อนกลับการแฮช โปรดทราบด้วยว่า md5 นั้นถือว่าใช้งานไม่ได้ดังนั้นคุณไม่ควรใช้เพื่อความปลอดภัยใด ๆ ก็ตาม (มันยังใช้ได้ดีในการตรวจสอบความสมบูรณ์ของไฟล์ที่ดาวน์โหลดและอื่น ๆ )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.