มีหลายคนเข้าใจผิดกันมากเกี่ยวกับ Encoding, Encryption, Hashing และ Obfuscation จำสับสนกันไปหมด วันนี้เรามาดูกันว่าจริงๆแล้วแต่ละอันมันคืออะไรกันแน่ครับ

1. Encoding

Encoding คือการแสดงหรือเปลี่ยนข้อมูลให้ออกมาเป็น format ที่ระบบนั้นๆสามารถเข้าใจได้ ซึ่งจุดประสงค์หลักของมันไม่ใช่เพื่อการเก็บข้อมูลให้ปลอดภัย เป็นเพียงการทำให้แน่ใจว่าระบบนั้นๆสามารถอ่านรู้เรื่องแค่นั้น

การ encoding สามารถแปลงไปได้หลาย format ไม่ว่าจะเป็น ASCII, Unicode, URL Encoding, Base64 และอื่นๆ

asciifull2. Encryption

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

การเปลี่ยนข้อมูลด้วย Encryption นั้นจะมีวิธีที่เฉพาะเจาะจงในการย้อนกลับ(Reverse) ให้กลายเป็นข้อมูลต้นฉบับ (Plain text) โดยต้องใช้ key และทฤษฎีที่ใช้ในการเข้ารหัส เช่น AES, Blowfish, RSACaesar เป็นต้นcaesarpicture

3. Hashing

Hashing จุดประสงค์หลักคือการให้แน่ใจว่าข้อมูลนั้นถูกต้อง ทำให้เราทราบได้เมื่อมีการแก้ไขข้อความ ซึ่งค่าการ input จะมีผลสัมพันธ์กับ Output โดยมีคุณสมบัติดังนี้

3.1 ค่า input อันเดิม จะได้ผลลัพธ์เดิมเสมอ

3.2 ค่า input ที่ไม่เหมือนกัน ผลลัพธ์ก็จะไม่เหมีอนกันเสมอ

3.3 ไม่สามารถย้อนกลับจาก output ไปเป็น input ได้  (ไม่สามารถ Reverse ได้)

3.4 หากมีการแก้ไขค่า input ไม่ว่าจะเล็กน้อยเพียงใด ก็จะส่งผลกระทบไปยังค่า hash output ทั้งหมด

ตัวอย่างการใช้งาน hash เช่น SHA-3, MD5 เป็นต้น

md5-hash-function

4. Obfuscation

จุดประสงค์ของ Obfuscation คือการทำให้ข้อมูลนั้นอ่านได้ยาก เพื่อให้ยากต่อการแกะ (attack) หรือการ copy ข้อมูล ซึ่งการใช้งาน obfuscation นั้นสามารถทำได้ในหลากหลายสถานการณ์ เช่น การหลบเลี่ยงการตรวจจับของ Antivirus, การทำให้สามารถอ่านได้ยากเมื่อถูก reverse engineer เป็นต้น

ตัวอย่างการใช้งาน Obfuscation เช่น Javascript Obfuscation, ProGuard  เป็นต้น

jquery_before_deobfuscation

Reference:: Danielmiessler.com