สร้างแฮช: MD5, SHA-1, SHA-256, SHA-512 และ HMAC
คำนวณแฮช MD5, SHA-1, SHA-256, SHA-384 และ SHA-512 หรือ HMAC ของข้อความหรือไฟล์ในเบราว์เซอร์ แล้วเปรียบเทียบกับ checksum ที่คาดไว้
ข้อความจะถูกแฮชตามที่ป้อนทุกตัวอักษร รวมถึงช่องว่างและการขึ้นบรรทัดใหม่ การขึ้นบรรทัดใหม่ในช่องนี้จะถูกแฮชเป็น LF
วางไฟล์ที่นี่หรือเลือกไฟล์
ยังไม่ได้เลือกไฟล์
ไฟล์นี้ใหญ่กว่า 500 MB ทั้งไฟล์จะถูกโหลดเข้าหน่วยความจำ เบราว์เซอร์จึงอาจหน่วยความจำไม่พอหรือทำงานช้าลง
ผลลัพธ์
ป้อนข้อความหรือเลือกไฟล์เพื่อดูแฮช
ค่า hex จะเปรียบเทียบโดยไม่สนตัวพิมพ์เล็ก/ใหญ่ ส่วนค่า Base64 ต้องตรงกันทุกตัวอักษร
หมายเหตุ
- MD5 และ SHA-1 มีการโจมตีแบบ collision ที่เป็นที่รู้จักแล้ว จึงไม่ควรใช้ในงานด้านความปลอดภัย ให้ใช้เฉพาะการตรวจสอบที่ไม่เกี่ยวกับความปลอดภัย เช่น การเปรียบเทียบไฟล์ที่ดาวน์โหลดกับ checksum ที่เผยแพร่ไว้
- แฮชไม่ใช่การเข้ารหัสลับ เครื่องมือนี้แปลงแฮชกลับเป็นข้อความหรือไฟล์ต้นฉบับไม่ได้
- อย่าใช้แฮชธรรมดาเก็บรหัสผ่าน ให้ใช้วิธีแฮชรหัสผ่านโดยเฉพาะ เช่น Argon2, scrypt หรือ bcrypt
- แฮชคำนวณจากไบต์ ข้อความเดียวกันที่ใช้การขึ้นบรรทัดใหม่ต่างกัน (CRLF หรือ LF) ใช้การเข้ารหัสอักขระต่างกัน หรือมีช่องว่างเกินมา จึงให้แฮชต่างกัน
- HMAC ใช้แฮชร่วมกับคีย์ลับ เครื่องมือนี้ไม่มี HMAC-MD5
- ข้อความและไฟล์ประมวลผลในเบราว์เซอร์ของคุณและไม่ถูกส่งไปยัง LeedyBox ไฟล์ขนาดใหญ่มากอาจทำงานช้า เพราะทั้งไฟล์จะถูกอ่านเข้าหน่วยความจำ
วิธีใช้
- ใน “ข้อมูลเข้า” ให้เลือก “ข้อความ” เพื่อคำนวณแฮชของข้อความที่พิมพ์หรือวาง หรือเลือก “ไฟล์” เพื่อคำนวณแฮชของไฟล์ในอุปกรณ์ของคุณ
- สำหรับไฟล์ ให้เลือกไฟล์หรือลากมาวางในกล่อง แล้วกด “คำนวณแฮช” หากเปลี่ยน “โหมด HMAC” หรือคีย์ในภายหลัง ให้กดปุ่มอีกครั้ง
- เลือก “รูปแบบผลลัพธ์” เป็น hex ตัวพิมพ์เล็ก hex ตัวพิมพ์ใหญ่ หรือ Base64 การเปลี่ยนรูปแบบเป็นเพียงการเปลี่ยนวิธีเขียนผลลัพธ์เดิม จึงไม่มีการคำนวณใหม่
- หากต้องการคำนวณ HMAC แทนแฮชธรรมดา ให้เลือก “โหมด HMAC” แล้วป้อนคีย์ลับในช่องที่ปรากฏขึ้น เครื่องมือนี้ไม่มี HMAC-MD5 แถว MD5 จึงแสดง “ใช้กับ HMAC ไม่ได้”
- หากต้องการตรวจสอบไฟล์ที่ดาวน์โหลด ให้วางค่าที่เผยแพร่ไว้ใน “checksum ที่คาดไว้ (ไม่บังคับ)” ค่านี้จะถูกเปรียบเทียบกับผลลัพธ์ทั้งหมดที่คำนวณได้ และแถวที่ตรงกันจะมีป้าย “ตรงกัน”
คำถามที่พบบ่อย
ทำไมแฮชของฉันจึงต่างจากผลของ sha256sum หรือเครื่องมืออื่น
ช่องข้อความจะคำนวณแฮชจากอักขระตามที่ป้อนทุกตัว ความต่างเพียงเล็กน้อยจึงทำให้ผลเปลี่ยน สาเหตุที่พบบ่อยคือการขึ้นบรรทัดใหม่ท้ายข้อความ เช่น echo hello | sha256sum จะคำนวณแฮชของ “hello” รวมกับอักขระขึ้นบรรทัดใหม่ จึงได้ SHA-256 ต่างจาก “hello” อย่างเดียว ส่วน printf hello | sha256sum จะไม่เติมอักขระนี้ อักขระที่ดูเหมือนกันอาจถูกเก็บต่างกันด้วย เช่น é อาจเป็นโค้ดพอยต์เดียว หรือเป็น e ตามด้วยเครื่องหมายเน้นเสียงแบบผสม หากต้องการคำนวณแฮชจากไบต์ของไฟล์ตามจริง ให้ใช้ “ไฟล์” แทนการวางเนื้อหา เพราะช่องข้อความจะเข้ารหัสข้อความเป็น UTF-8 และคำนวณการขึ้นบรรทัดใหม่เป็น LF
checksum ที่เผยแพร่ไว้ถูกต้อง แต่ทำไมจึงไม่ตรงกัน
ให้วางเฉพาะค่าแฮช ช่องว่าง แท็บ และการขึ้นบรรทัดใหม่จะถูกลบออกก่อนเปรียบเทียบ ดังนั้นหากวางทั้งบรรทัดจากไฟล์ checksum ชื่อไฟล์จะกลายเป็นส่วนหนึ่งของค่า และคำนำหน้าอย่าง sha256: ก็ทำให้ไม่ตรงกันเช่นกัน เครื่องมือจะเปรียบเทียบกับทุกอัลกอริทึมที่คำนวณได้ จึงไม่ต้องเลือกอัลกอริทึมเอง หากวางเฉพาะค่าแล้วยังไม่ตรงกัน ให้ตรวจสอบว่าปิด “โหมด HMAC” อยู่ และ checksum นั้นใช้ MD5, SHA-1, SHA-256, SHA-384 หรือ SHA-512 เพราะอัลกอริทึมอื่น เช่น SHA-3 หรือ BLAKE2 ไม่ได้คำนวณที่นี่ หากไม่ใช่กรณีเหล่านี้ ไฟล์น่าจะต่างจากไฟล์ที่ใช้สร้าง checksum เช่น เป็นคนละเวอร์ชันหรือดาวน์โหลดไม่ครบ
ผลลัพธ์ที่ขึ้นต้นด้วย e3b0c442 หรือ d41d8cd9 หมายความว่าอะไร
นี่คือแฮชของข้อมูลว่าง (0 ไบต์) ในรูปแบบ hex โดยค่า SHA-256 ขึ้นต้นด้วย e3b0c442 และลงท้ายด้วย b855 ส่วนค่า MD5 คือ d41d8cd98f00b204e9800998ecf8427e เมื่อปิด “โหมด HMAC” คุณจะเห็นค่าเหล่านี้หลังจากล้างช่องข้อความ หรือเมื่อใช้ไฟล์ขนาด 0 ไบต์ หากโปรแกรมของคุณให้ค่าใดค่าหนึ่งนี้กับข้อมูลที่ไม่ควรว่าง ก็น่าจะเป็นเพราะโปรแกรมคำนวณแฮชของสตริงว่างหรือไฟล์ว่าง
ใช้โหมด HMAC ตรวจสอบลายเซ็นของ webhook หรือ API ได้ไหม
ได้ในหลายกรณี หากลายเซ็นเป็น HMAC ที่ใช้ SHA-1, SHA-256, SHA-384 หรือ SHA-512 (เครื่องมือนี้ไม่มี HMAC-MD5) ให้เลือก “โหมด HMAC” ป้อน secret ที่ใช้ลงนาม ใช้ body ของคำขอเป็นข้อมูลเข้า แล้ววางลายเซ็นใน “checksum ที่คาดไว้ (ไม่บังคับ)” โดยไม่มีคำนำหน้าอย่าง sha256= ระบบรู้จักลายเซ็นทั้งแบบ hex และ Base64 ข้อมูลเข้าต้องมีไบต์เดียวกับที่ถูกลงนาม ดังนั้น body JSON ที่จัดรูปแบบใหม่จะไม่ตรงกัน และ body ที่มีการขึ้นบรรทัดแบบ CRLF ต้องบันทึกเป็นไฟล์แล้วคำนวณด้วย “ไฟล์” บริการจำนวนมากลงนามมากกว่า body เช่น มี timestamp และตัวคั่นวางไว้หน้า body จึงควรตรวจสอบเอกสารของบริการว่าลงนามข้อมูลใดบ้างอย่างชัดเจน
คีย์ลับของฉันอยู่ในรูปแบบ hex หรือ Base64 ใช้ได้ไหม
ใช้ได้เฉพาะเมื่อบริการใช้ข้อความของคีย์ตามที่เป็นอยู่ ช่อง “คีย์ลับ (UTF-8)” ใช้ไบต์ UTF-8 ของอักขระที่ป้อนและไม่ถอดรหัส hex หรือ Base64 ดังนั้นหากบริการถอดรหัสคีย์ก่อนลงนาม HMAC ที่คำนวณที่นี่จะไม่ตรงกัน ช่องว่างที่ต้นหรือท้ายช่องก็นับเป็นส่วนหนึ่งของคีย์ด้วย
จะสร้างแฮช Subresource Integrity (SRI) ได้อย่างไร
เลือก “ไฟล์” เลือกไฟล์สคริปต์หรือสไตล์ชีต ตรวจสอบให้แน่ใจว่าปิด “โหมด HMAC” อยู่ กด “คำนวณแฮช” แล้วตั้ง “รูปแบบผลลัพธ์” เป็น “Base64” เติม sha384- หน้าค่า SHA-384 เพื่อให้ได้ค่าของแอตทริบิวต์ integrity ส่วน sha256- และ sha512- ใช้ได้ในลักษณะเดียวกัน ไฟล์ต้องมีไบต์ตรงกันกับไฟล์ที่เบราว์เซอร์ดาวน์โหลด มิฉะนั้นเบราว์เซอร์จะไม่ยอมใช้ไฟล์นั้น ไฟล์ที่โหลดจาก origin อื่นยังต้องมีแอตทริบิวต์ crossorigin และเซิร์ฟเวอร์ของไฟล์นั้นต้องอนุญาต CORS
ผลลัพธ์แบบ hex กับ Base64 ต่างกันอย่างไร
ทั้งสองแบบแสดงไดเจสต์เดียวกัน hex ใช้สองอักขระต่อหนึ่งไบต์ จึงยาว 64 อักขระสำหรับ SHA-256 และเป็นรูปแบบที่เครื่องมืออย่าง sha256sum แสดง ส่วน Base64 สั้นกว่า คือ 44 อักขระสำหรับ SHA-256 ผลลัพธ์ Base64 ใช้ชุดอักขระมาตรฐานที่มี + และ / พร้อม padding = ไม่ใช่แบบ URL-safe ที่ใช้ - และ _ ค่าที่เป็นแบบ URL-safe หรือค่าที่ตัด padding = ออก จึงอาจไม่ตรงกันเมื่อเปรียบเทียบ