ข้ามไปยังเนื้อหา
LeedyBox
สนับสนุน

สร้างแฮช: MD5, SHA-1, SHA-256, SHA-512 และ HMAC

คำนวณแฮช MD5, SHA-1, SHA-256, SHA-384 และ SHA-512 หรือ HMAC ของข้อความหรือไฟล์ในเบราว์เซอร์ แล้วเปรียบเทียบกับ checksum ที่คาดไว้

ข้อมูลเข้า

ข้อความจะถูกแฮชตามที่ป้อนทุกตัวอักษร รวมถึงช่องว่างและการขึ้นบรรทัดใหม่ การขึ้นบรรทัดใหม่ในช่องนี้จะถูกแฮชเป็น LF

ผลลัพธ์

ป้อนข้อความหรือเลือกไฟล์เพื่อดูแฮช

MD5
SHA-1
SHA-256
SHA-384
SHA-512

ค่า hex จะเปรียบเทียบโดยไม่สนตัวพิมพ์เล็ก/ใหญ่ ส่วนค่า Base64 ต้องตรงกันทุกตัวอักษร

หมายเหตุ

  • MD5 และ SHA-1 มีการโจมตีแบบ collision ที่เป็นที่รู้จักแล้ว จึงไม่ควรใช้ในงานด้านความปลอดภัย ให้ใช้เฉพาะการตรวจสอบที่ไม่เกี่ยวกับความปลอดภัย เช่น การเปรียบเทียบไฟล์ที่ดาวน์โหลดกับ checksum ที่เผยแพร่ไว้
  • แฮชไม่ใช่การเข้ารหัสลับ เครื่องมือนี้แปลงแฮชกลับเป็นข้อความหรือไฟล์ต้นฉบับไม่ได้
  • อย่าใช้แฮชธรรมดาเก็บรหัสผ่าน ให้ใช้วิธีแฮชรหัสผ่านโดยเฉพาะ เช่น Argon2, scrypt หรือ bcrypt
  • แฮชคำนวณจากไบต์ ข้อความเดียวกันที่ใช้การขึ้นบรรทัดใหม่ต่างกัน (CRLF หรือ LF) ใช้การเข้ารหัสอักขระต่างกัน หรือมีช่องว่างเกินมา จึงให้แฮชต่างกัน
  • HMAC ใช้แฮชร่วมกับคีย์ลับ เครื่องมือนี้ไม่มี HMAC-MD5
  • ข้อความและไฟล์ประมวลผลในเบราว์เซอร์ของคุณและไม่ถูกส่งไปยัง LeedyBox ไฟล์ขนาดใหญ่มากอาจทำงานช้า เพราะทั้งไฟล์จะถูกอ่านเข้าหน่วยความจำ

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

MD5 และ SHA-1 ไม่เหมาะกับงานด้านความปลอดภัย แฮชไม่ใช่การเข้ารหัสลับ และ checksum ที่ตรงกันแสดงเพียงว่าข้อมูลเหมือนกับข้อมูลที่ใช้สร้าง checksum นั้น

วิธีใช้

  1. ใน “ข้อมูลเข้า” ให้เลือก “ข้อความ” เพื่อคำนวณแฮชของข้อความที่พิมพ์หรือวาง หรือเลือก “ไฟล์” เพื่อคำนวณแฮชของไฟล์ในอุปกรณ์ของคุณ
  2. สำหรับไฟล์ ให้เลือกไฟล์หรือลากมาวางในกล่อง แล้วกด “คำนวณแฮช” หากเปลี่ยน “โหมด HMAC” หรือคีย์ในภายหลัง ให้กดปุ่มอีกครั้ง
  3. เลือก “รูปแบบผลลัพธ์” เป็น hex ตัวพิมพ์เล็ก hex ตัวพิมพ์ใหญ่ หรือ Base64 การเปลี่ยนรูปแบบเป็นเพียงการเปลี่ยนวิธีเขียนผลลัพธ์เดิม จึงไม่มีการคำนวณใหม่
  4. หากต้องการคำนวณ HMAC แทนแฮชธรรมดา ให้เลือก “โหมด HMAC” แล้วป้อนคีย์ลับในช่องที่ปรากฏขึ้น เครื่องมือนี้ไม่มี HMAC-MD5 แถว MD5 จึงแสดง “ใช้กับ HMAC ไม่ได้”
  5. หากต้องการตรวจสอบไฟล์ที่ดาวน์โหลด ให้วางค่าที่เผยแพร่ไว้ใน “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 = ออก จึงอาจไม่ตรงกันเมื่อเปรียบเทียบ