Adler-32 Hash Generator: คำนวณ Checksum เร็วด้วย zlib และ DEFLATE
รู้จักวิธีใช้ Adler-32 hash generator คำนวณ checksum ใน browser ล้วน ๆ ทำไม zlib และ DEFLATE ถึงเลือกใช้ และเมื่อไหร่ควรเลือกแทน CRC-32
Table of Contents
ทุกครั้งที่คุณ download ไฟล์ .zip, เปิดหน้าเว็บที่ถูกบีบอัดด้วย gzip หรือ parse รูปภาพ PNG จะมี algorithm เล็ก ๆ ตัวหนึ่งชื่อ Adler-32 ทำงานอยู่เบื้องหลังเพื่อยืนยันว่าข้อมูลของคุณมาถึงครบถ้วนสมบูรณ์ มันเป็นหนึ่งใน checksum ที่ถูกใช้งานแพร่หลายที่สุดบนอินเทอร์เน็ต แต่ developer ส่วนใหญ่กลับไม่เคยคำนวณมันด้วยตัวเองเลย Adler-32 Hash Generator แก้ปัญหานั้น: paste text หรือลากไฟล์มาวาง แล้วรับ digest แบบ hex 8 ตัวอักษรทันที โดยทุก byte ถูกประมวลผลในเครื่องของคุณเองใน browser
Adler-32 ยืนอยู่ตรงจุดสมดุลระหว่างความเร็วและความปลอดภัยของข้อมูล มันเร็วกว่า CRC-32 อย่างชัดเจนบน CPU จำนวนมาก เขียน implement เองได้ในไม่กี่บรรทัด และถูกกำหนดเป็นมาตรฐานใน RFC 1950 ซึ่งเป็นส่วนหนึ่งของ zlib specification นั่นทำให้มันเป็น integrity check ประจำทางของ stream ที่บีบอัดด้วย DEFLATE, gzip wrapper และ binary format เฉพาะทางอีกนับไม่ถ้วน
ในคู่มือนี้ คุณจะได้เรียนรู้ว่า algorithm ทำงานอย่างไรจริง ๆ เมื่อไหร่ควรหยิบมันใช้แทน CRC-32 หรือ SHA-256 และวิธีใช้ generator ออนไลน์ฟรีเพื่อตรวจสอบไฟล์และ debug compression pipeline — ทั้งหมดนี้โดยไม่ต้อง upload ข้อมูลแม้แต่ byte เดียวไปที่ server
ทำไมต้องใช้ Adler-32 Hash Generator?
- ไม่ต้อง upload, เป็นส่วนตัวสุด ๆ เครื่องมือทำงาน client-side 100% ด้วย JavaScript text และไฟล์ของคุณไม่เคยออกจากเครื่อง ซึ่งสำคัญมากเมื่อตรวจสอบ binary ขององค์กร, ข้อมูลลูกค้า หรืออะไรก็ตามที่อยู่ภายใต้ compliance policy
- ผลลัพธ์ทันทีทั้ง text และ file สลับโหมด text กับโหมด file ได้อิสระ ลากไฟล์ขนาดถึง 20MB มาวาง digest จะโผล่ทันทีที่อ่าน byte ตัวสุดท้ายเสร็จ — ไม่มี queue ไม่มี server round-trip
- รูปแบบผลลัพธ์หลากหลาย ได้ digest เป็น hex 8 ตัวพิมพ์เล็ก สลับตัวพิมพ์ใหญ่ได้สำหรับเทียบกับตัวอย่างใน spec และมี binary representation ครบ 32 bit เมื่อต้องการส่อง raw bits
- เหมาะกับการ debug zlib และ DEFLATE ถ้าคุณกำลัง implement หรือทดสอบ compression library การเทียบ Adler-32 trailer ของคุณกับ implementation ที่เชื่อถือได้ คือวิธีที่เร็วที่สุดในการหาว่า stream พังตรงจุดไหน
- เข้าถึงได้ดี รองรับ keyboard ปุ่ม copy-to-clipboard, keyboard navigation และ ARIA live announcement ทำให้เครื่องมือใช้งานได้ดีกับ screen reader และ workflow ที่ใช้ keyboard เพียว ๆ
- ไม่ต้องสมัครสมาชิก ไม่มี limit เป็นเว็บ tool ฟรี เปิดใน browser tab ไหนก็ได้ พร้อมใช้ทุกครั้งที่ต้องการ integrity check แบบเร็ว
คุณสมบัติเด่น
| คุณสมบัติ | ทำอะไร |
|---|---|
| โหมด text | พิมพ์หรือ paste text ใด ๆ แล้วคำนวณ Adler-32 ทันที |
| โหมด file | upload ไฟล์ถึง 20MB แล้ว hash ใน browser โดยตรง |
| ผลลัพธ์ hex | digest 8 ตัวอักษร สลับตัวพิมพ์เล็ก-ใหญ่ได้ |
| ผลลัพธ์ binary | binary representation ครบ 32 bit ของ digest |
| ตัวนับ byte | บอกจำนวน input bytes ที่ถูก hash แบบแม่นยำ |
| ปุ่ม copy | คลิกเดียว copy digest ไปยัง clipboard |
มีรายละเอียดสองจุดที่อยากให้สังเกต อย่างแรกคือตัวนับ byte มีประโยชน์กว่าที่คิด: เวลา hash ไฟล์ การยืนยันความยาว input เป็น sanity check ที่เร็วที่สุดว่าอ่านข้อมูลถูกไฟล์จริง ๆ อย่างที่สองคือปุ่มสลับตัวพิมพ์ใหญ่ มีอยู่เพราะ reference table และตัวอย่างใน RFC มักพิมพ์ Adler-32 เป็น hex ตัวพิมพ์ใหญ่ (เช่น 11E60398) ในขณะที่ tool ส่วนใหญ่ปล่อยค่าเป็นตัวพิมพ์เล็ก — การสลับไปมาได้ช่วยประหยัดเวลาแก้ manual ที่น่าเบื่อ
วิธีใช้งาน
- เปิด Adler-32 Hash Generator ใน browser ของคุณ
- เลือกโหมด: text สำหรับข้อความ หรือ file สำหรับ upload เอกสาร, archive หรือ binary
- พิมพ์ text ลงในช่อง input หรือคลิกพื้นที่ไฟล์แล้วเลือกไฟล์ (สูงสุด 20MB)
- อ่านผลลัพธ์: digest แบบ hex 8 ตัวอักษร, รูปแบบ binary และจำนวน byte ของ input
- คลิก Copy เพื่อหยิบ digest ไปใช้ และเปิดตัวพิมพ์ใหญ่ถ้าต้องเทียบกับ reference table
workflow เท่านี้เอง เพราะทุกอย่างทำงาน local คุณสามารถทำซ้ำกับไฟล์หลายสิบไฟล์ได้โดยไม่ต้องกังวลเรื่อง rate limit หรือข้อมูลออกจากเครื่อง
เข้าใจ Adler-32: คณิตศาสตร์เบื้องหลัง checksum
Adler-32 ถูกคิดค้นโดย Mark Adler เพื่อเป็นทางเลือกที่เร็วกว่า Fletcher checksum และกลายมาเป็นเพื่อนคู่ใจด้าน integrity ของ DEFLATE ใน zlib มันเก็บ running sum แบบ 16-bit สองตัวไปตลอด input bytes:
- s1 เริ่มที่ 1 และสะสมผลรวมของทุก byte: s1 = 1 + bytes[0] + bytes[1] + ...
- s2 เริ่มที่ 0 และสะสมค่าของ s1 ณ ทุกขั้น: s2 = s1(ขั้นที่ 0) + s1(ขั้นที่ 1) + ...
ทั้งสอง sum ถูก modulo ด้วย 65521 — จำนวนเฉพาะที่ใหญ่ที่สุดที่ต่ำกว่า 65536 — และ digest สุดท้ายแบบ 32-bit ก็คือ s2 << 16 | s1 โดย s2 อยู่ใน 16 bit บนและ s1 อยู่ใน 16 bit ล่าง
ตัวอย่างการคำนวณ
ลองใช้ string Wikipedia: นำค่า ASCII ของตัวอักษรทั้งเก้าตัวมารวมกัน บวก 1 เริ่มต้น แล้ว reduce modulo 65521 จะได้ s1 จากนั้นสะสมค่า intermediate ของ s1 ทุกขั้นจะได้ s2 เมื่อรวมกันจะได้ 11E60398 — ตรงกับที่ generator แสดงเมื่อคุณ paste คำว่า Wikipedia ลงไป ส่วน empty string เป็นกรณีพิเศษ: s1 คงค่าเริ่มต้นที่ 1 และ s2 คงที่ 0 digest จึงเป็น 00000001
ทำไม NMAX = 5552 ถึงสำคัญ
implementation แบบ naive จะทำ modulo ทีละ byte ซึ่งสิ้นเปลือง optimization คลาสสิกคือประมวลผลเป็น block ละไม่เกิน 5552 bytes ก่อนค่อย reduce: 5552 คือขนาด block ที่ใหญ่ที่สุดที่การันตีว่าจะไม่ overflow เลข 32-bit ดังนั้น implementation (รวมถึงเครื่องมือนี้) จึงใช้ integer add เร็ว ๆ ภายใน block และทำ modulo เพียงครั้งเดียวต่อ block นั่นคือเหตุผลใหญ่ส่วนหนึ่งที่ Adler-32 ชนะ CRC-32 ใน software บนหลาย architecture
Adler-32 เทียบกับ CRC-32
| คุณสมบัติ | Adler-32 | CRC-32 |
|---|---|---|
| ความเร็วใน software | เร็วกว่า (บวกเลขง่าย ๆ) | ช้ากว่า (polynomial division) |
| ตรวจจับ burst error | อ่อนกว่า | แข็งแรงกว่า |
| input สั้น | เสี่ยง collision มากกว่า | กระจายดีกว่า |
| ถิ่นที่พบ | zlib, DEFLATE, gzip stream | ZIP archive, Ethernet frame |
trade-off ที่ต้องยอมรับ: Adler-32 ตรวจจับความเสียหายระดับ byte ได้ดี แต่อ่อนมากกับ input ที่สั้นมาก ๆ เพราะ component s2 กระจายตัวจำกัด สำหรับ input ที่สั้นกว่าสองสามร้อย byte CRC-32 เป็นตัวเลือกที่ปลอดภัยกว่า และทั้งคู่ไม่ใช่ cryptographic hash — forge ได้ง่ายมากทั้งคู่ ดังนั้นอย่าใช้ Adler-32 กับ password, signature หรือการกันการแก้ไขข้อมูลโดยผู้ไม่หวังดี ใช้มันเพื่อตรวจจับความเสียหายจากอุบัติเหตุ ซึ่งเป็นสิ่งที่ zlib ออกแบบมันมาให้ทำพอดี
use cases ในทางปฏิบัติ
ตรวจ integrity ของ zlib และ gzip stream
ถ้าคุณกำลังเขียน DEFLATE decoder หรือ debug ว่าทำไม gzip stream ถึง decompress ไม่ผ่าน Adler-32 trailer คือ ground truth ของคุณ hash output ที่ decompress แล้วด้วย generator แล้วเทียบกับ trailer 4 byte ท้าย stream ถ้าไม่ตรง แปลว่าข้อมูลที่คลายออกมาต่างจากที่ compressor เห็น — มักเป็น bug ใน window handling หรือการสร้าง Huffman table
dedup ไฟล์และตรวจการ transfer แบบเร็ว
ก่อนและหลัง copy ไฟล์ระหว่างเครื่อง ให้ hash ทั้งสองฝั่ง digest ที่ตรงกันให้ความมั่นใจสูงว่า copy เป็น byte-identical Adler-32 ต้าน collision ไม่เท่า SHA-256 แต่สำหรับการตรวจจับ transfer ที่เสียหาย (ตรงข้ามกับการถูกโจมตี) มันเร็ว ฟรี และเพียงพอเกินไหวสำหรับงานประจำวัน
QA regression snapshot
test suite ที่ capture ผลลัพธ์ binary — PDF ที่ render แล้ว, protobuf ที่ serialize แล้ว, database dump — มักเก็บ checksum แทน artifact ทั้งไฟล์ digest ของ Adler-32 กระทัดรัด (hex 8 ตัว) เทียบใน diff ได้เร็ว และส่องเห็นง่ายใน test log เมื่อ snapshot test fail digest จะบอกทันทีว่า bytes เปลี่ยนหรือไม่
สอนเรื่อง checksum ในคอร์ส networking
เพราะ algorithm จดใส่กระดานได้ Adler-32 จึงเป็นขวัญใจในห้องเรียนสำหรับสอน design ของ checksum: running sum สองตัว modulo ด้วยจำนวนเฉพาะหนึ่งตัว และ shift-and-or หนึ่งครั้งเพื่อรวมผล นักเรียนคำนวณ input สั้น ๆ ด้วยมือได้ แล้วตรวจคำตอบกับ generator — feedback loop ที่ทันทีและเป็นรางวัล ซึ่งเลข polynomial ของ CRC-32 ให้ไม่ได้
Best Practices
- เทียบ reference case ให้เป๊ะ digest ขึ้นกับ raw bytes ไม่ใช่ตัวอักษร abc แบบ UTF-8 กับ abc ที่มี newline ต่อท้ายให้ checksum ต่างกัน — เช็คตัวนับ byte ถ้าผลลัพธ์ไม่ตรงกัน
- input สั้นให้เลือก CRC-32 ต่ำกว่าสองสามร้อย byte ความต้าน collision ของ Adler-32 ลดลงชัดเจน ให้ใช้ CRC-32 Checksum Calculator แทน
- อย่าใช้กับงาน security Adler-32 เป็น integrity check สำหรับอุบัติเหตุ ไม่ใช่ผู้ไม่หวังดี สำหรับตรวจการแก้ไขข้อมูล ใช้ cryptographic hash จาก Hash Generator
- hash bytes ชุดเดียวกันทั้งสองครั้ง เวลาเทียบไฟล์ ให้แน่ใจว่าทั้งสองฝั่งอ่านไฟล์แบบ binary mode โดยไม่มี encoding conversion หรือการแปลง line-ending
- ของใหญ่ให้ใช้โหมด file การ paste text เป็น megabytes ลง textarea นั้นเปราะบาง โหมด file จัดการ stream ถึง 20MB ได้เสถียรและแสดง byte count แม่นยำ
- จดความยาว input ไปกับ digest checksum บวก byte count ช่วยวิเคราะห์ปัญหาได้มากกว่า checksum ลอย ๆ เวลาไล่หา mismatch
เริ่มคำนวณ Adler-32 วันนี้
Adler-32 พิสูจน์ว่า integrity check ที่ดีไม่จำเป็นต้องซับซ้อน: sum สองตัว จำนวนเฉพาะหนึ่งตัว และ 32 bits ที่เฝ้าโลกของ compressed data มาเงียบ ๆ หลายทศวรรษ ไม่ว่าคุณจะ debug DEFLATE stream ตรวจสอบ file transfer หรือสอน checksum เป็นครั้งแรก Adler-32 Hash Generator ให้คำตอบใน paste เดียว — เป็นส่วนตัว ทันที และอยู่ใน browser ของคุณทั้งหมด
เครื่องมือที่เกี่ยวข้อง
- CRC-32 Checksum Calculator — ทางเลือกคลาสสิกที่แข็งแรงกว่าสำหรับ input สั้นและ workflow แบบ ZIP
- Hash Generator — MD5, SHA-1, SHA-256 และอื่น ๆ สำหรับ digest ระดับ cryptographic
- File Hash Checker — ตรวจไฟล์ที่ download กับ checksum ที่เผยแพร่ ในขั้นตอนเดียว
ขอให้มีความสุขกับการ hashing!