ฉันอ่านเอกสารเกี่ยวกับ md5 มันบอกว่ามัน 128 บิต แต่ทำไมถึงเป็น 32 ตัวอักษร? ฉันคำนวณอักขระไม่ได้
- 1 ไบต์คือ 8 บิต
- ถ้า 1 อักขระคือ 1 ไบต์
- แล้ว 128 บิตคือ 128/8 = 16 ไบต์ใช่ไหม
แก้ไข:
SHA-1 สร้าง 160 บิตมีอักขระกี่ตัว?
ฉันอ่านเอกสารเกี่ยวกับ md5 มันบอกว่ามัน 128 บิต แต่ทำไมถึงเป็น 32 ตัวอักษร? ฉันคำนวณอักขระไม่ได้
แก้ไข:
SHA-1 สร้าง 160 บิตมีอักขระกี่ตัว?
((1 << (n*4))-1).bit_length()
โดยที่ n คือความยาวของแฮชเป็นเลขฐานสิบหก
คำตอบ:
32 ตัวอักษรเป็นตัวแทนฐานสิบหกนั่นคือ 2 ตัวอักษรต่อไบต์
ฉันต้องการสรุปคำตอบบางส่วนในโพสต์เดียว
อันดับแรกอย่าคิดว่าแฮช MD5 เป็นสตริงอักขระ แต่เป็นเลขฐานสิบหก ดังนั้นแต่ละหลักจึงเป็นเลขฐานสิบหก (0-15 หรือ 0-F) และแทนสี่บิตไม่ใช่แปด
การที่ต่อหนึ่งไบต์หรือแปดบิตจะแทนด้วยตัวเลขสองหลักหกเหลี่ยมเช่น b' 1111 1111
' = =0xFF
255
แฮช MD5 มีความยาว 128 บิตและโดยทั่วไปแสดงด้วยเลขฐานสิบหก 32 หลัก
แฮช SHA-1 มีความยาว 160 บิตและโดยทั่วไปแสดงด้วยเลขฐานสิบหก 40 หลัก
สำหรับตระกูล SHA-2 ฉันคิดว่าความยาวแฮชอาจเป็นหนึ่งในชุดที่กำหนดไว้ล่วงหน้า ดังนั้น SHA-512 จึงสามารถแสดงด้วยเลขฐานสิบหก 128 หลัก
อีกครั้งโพสต์นี้อ้างอิงจากคำตอบก่อนหน้านี้
เพื่อให้ชัดเจนเกี่ยวกับบิต vs ไบต์, vs อักขระ
2**8
ชุดค่าผสมที่เป็นไปได้: ชุดค่าผสม 256 ชุดเมื่อคุณดูอักขระเลขฐานสิบหก
[0-9] + [a-f]
: เต็มรูปแบบของ0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
2**4
: นั่นหมายความว่าอักขระเลขฐานสิบหกหนึ่งตัวสามารถเก็บ 4 บิตในหนึ่งไบต์ (ครึ่งไบต์)2**8
รวมกัน[0-9a-f][0-9a-f]
เลขฐานสิบหกคือและแทนค่าครึ่งหนึ่งของไบต์ (เราเรียกว่าครึ่งไบต์ว่าแทะ )เมื่อคุณดูอักขระไบต์เดี่ยวปกติ (เราจะข้ามอักขระหลายไบต์และอักขระแบบกว้างไปที่นี่โดยสิ้นเชิง)
2**8
ช่วงmd5()
สามารถจัดเก็บข้อมูลทั้งหมดได้คุณจะเห็นตัวอักษรตัวพิมพ์เล็กทั้งหมดตัวอักษรตัวพิมพ์ใหญ่เครื่องหมายวรรคตอนและสิ่งต่างๆเช่น¡°ÀÐàð
ช่องว่างเช่น (บรรทัดใหม่และแท็บ) และอักขระควบคุม (ซึ่งคุณสามารถ ' ไม่เห็นด้วยซ้ำและหลายรายการที่ไม่ได้ใช้งาน)ดังนั้นมันจึงแตกต่างกันอย่างชัดเจนและฉันหวังว่าจะให้รายละเอียดของความแตกต่างที่ดีที่สุด
MD5 ให้เลขฐานสิบหก (0-15 / 0-F) ดังนั้นจึงเป็นสี่บิต 128/4 = 32 ตัวอักษร
SHA-1 จะให้เลขฐานสิบหกด้วย (0-15 / 0-F) ดังนั้น 160/4 = 40 อักขระ
(เนื่องจากเป็นการดำเนินการทางคณิตศาสตร์เอาต์พุตของฟังก์ชันการแฮชส่วนใหญ่มักแสดงเป็นเลขฐานสิบหก)
คุณอาจนึกถึงอักขระข้อความ ASCII ซึ่งมีขนาด 8 บิต
นั่นคืออักขระเลขฐานสิบหก 32 ตัว - อักขระเลขฐานสิบหก 1 ตัวคือ 4 บิต
ตัวเลขเหล่านี้เป็นเลขฐานสิบหกไม่ใช่อักขระ หนึ่งหลัก = 4 บิต
ไม่ใช่อักขระจริง ๆ แต่เป็นเลขฐานสิบหก
เลขฐานสิบหกหนึ่งตัว = 1 แทะ (สี่บิต)
เลขฐานสิบหกสองหลัก = 1 ไบต์ (แปดบิต)
MD5 = 32 ฐานสิบหก
เลขฐานสิบหก 32 หลัก = 16 ไบต์ (32/2)
16 ไบต์ = 128 บิต (16 * 8)
เช่นเดียวกับ SHA-1 ยกเว้นความยาวของเลขฐานสิบหก 40 หลัก
ฉันหวังว่านี่จะช่วยได้.