ASCII, Unicode และการแทนข้อความ
ทำความเข้าใจว่าข้อความกลายเป็นไบต์ได้อย่างไร และเหตุใดการเข้ารหัสอักขระจึงสำคัญในบริบทของการเข้ารหัสลับ
ASCII, Unicode และการแทนข้อความ เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน
ASCII ในฐานะการเข้ารหัส 7 บิต
ASCII (American Standard Code for Information Interchange) ซึ่งทำให้เป็นมาตรฐานในปี 1963 เข้ารหัสอักขระ 128 ตัวด้วย 7 บิต (ค่า 0-127) ครอบคลุมอักษรภาษาอังกฤษ (ตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก) ตัวเลข เครื่องหมายวรรคตอน และอักขระควบคุม
ASCII ถูกออกแบบมาสำหรับภาษาอังกฤษและอุปกรณ์โทรคมนาคมของอเมริกา มันทำงานได้ดีตามจุดประสงค์ที่ออกแบบไว้ แต่ไม่เพียงพออย่างยิ่งสำหรับภาษาอื่นนอกเหนือจากภาษาอังกฤษ
อักขระควบคุมใน ASCII
อักขระ ASCII 32 ตัวแรก (0-31) รวมถึง DEL (127) เป็นอักขระควบคุม เดิมอักขระเหล่านี้ออกแบบมาเพื่อควบคุมเครื่องโทรพิมพ์ ได้แก่ LF (การขึ้นบรรทัด, 10), CR (การกลับต้นบรรทัด, 13), BEL (เสียงกริ่ง, 7), TAB (9), ESC (27)
ในบริบทการเข้ารหัสลับ อักขระควบคุมอาจก่อปัญหาได้ ไบต์โมฆะ (0x00) ทำให้สตริงของ C สิ้นสุดก่อนกำหนด และอักขระ DEL หรือ ESC อาจถูกตีความโดยโปรแกรมจำลองเทอร์มินัล
ASCII แบบขยายและปัญหาของมัน
ประเทศต่าง ๆ สร้างส่วนขยาย ASCII ของตนเองโดยใช้บิตลำดับที่ 8 (ค่า 128-255) ทำให้เกิดรูปแบบการเข้ารหัสที่เข้ากันไม่ได้หลายร้อยรูปแบบ ได้แก่ ISO-8859-1 (Latin-1) สำหรับยุโรปตะวันตก, KOI-8R สำหรับภาษารัสเซีย และ Big5 สำหรับภาษาจีน
เอกสารที่บันทึกด้วยการเข้ารหัสแบบหนึ่งจะปรากฏเป็นอักขระอ่านไม่รู้เรื่องเมื่อเปิดด้วยการเข้ารหัสอีกแบบหนึ่ง การขาดมาตรฐานสากลทำให้การพัฒนาซอฟต์แวร์ระหว่างประเทศเป็นความท้าทายอย่างมากตลอดช่วงทศวรรษ 1980 และ 1990
Unicode ในฐานะชุดอักขระสากล
Unicode ถูกสร้างขึ้นเพื่อจัดให้มีชุดอักขระสากลชุดเดียวที่ครอบคลุมระบบการเขียนของมนุษย์ทั้งหมด ปัจจุบันกำหนดอักขระมากกว่า 149,000 ตัว ครอบคลุมระบบอักษร 161 ระบบ รวมถึงระบบอักษรและสัญลักษณ์ทางประวัติศาสตร์
Unicode แยกตัวตนอักขระ (จุดรหัส เช่น U+0041 สำหรับ "A") ออกจากการเข้ารหัส (วิธีจัดเก็บจุดรหัสนั้นในรูปไบต์) การแยกนี้ทำให้รูปแบบการเข้ารหัสหลายรูปแบบสามารถแทนอักขระเดียวกันได้
การเข้ารหัสความยาวผันแปรด้วย UTF-8
UTF-8 เข้ารหัสจุดรหัส Unicode โดยใช้ไบต์ 1 ถึง 4 ไบต์ อักขระ ASCII (U+0000 ถึง U+007F) ใช้ไบต์เพียง 1 ไบต์ ซึ่งมีค่าเหมือนกับ ASCII ทุกประการ ทำให้ UTF-8 ใช้งานร่วมกับ ASCII รุ่นก่อนหน้าได้
อักขระตั้งแต่ U+0080 ถึง U+07FF ใช้ 2 ไบต์ ส่วน U+0800 ถึง U+FFFF ใช้ 3 ไบต์ (ครอบคลุมระบบอักษรที่ใช้กันทั่วไปส่วนใหญ่ รวมถึงภาษาจีน ภาษาญี่ปุ่น และภาษาเกาหลี) U+10000 ขึ้นไปใช้ 4 ไบต์
UTF-16 และ UTF-32
UTF-16 ใช้ 2 ไบต์สำหรับอักขระที่ใช้บ่อยที่สุด (ระนาบหลายภาษาพื้นฐาน หรือ U+0000 ถึง U+FFFF) และใช้ 4 ไบต์ (คู่ตัวแทน) สำหรับอักขระที่อยู่นอกเหนือ U+FFFF โดยใช้ภายใน Windows และ Java
UTF-32 ใช้ไบต์ 4 ไบต์ต่อจุดรหัสพอดี ทำให้มีความกว้างคงที่และเข้าถึงตามตำแหน่งอักขระได้ง่าย แต่สิ้นเปลืองสำหรับข้อความที่ประกอบด้วย ASCII เป็นส่วนใหญ่ โดยใช้ในรูปแบบการแทนข้อมูลภายในบางชนิดเพื่อให้เข้าถึงแบบสุ่มได้รวดเร็ว
เครื่องหมายลำดับไบต์ (BOM)
เครื่องหมายลำดับไบต์ (BOM) คืออักขระ Unicode U+FEFF ที่วางไว้ต้นไฟล์เพื่อระบุลำดับไบต์และการเข้ารหัส ใน UTF-16 เครื่องหมายนี้ใช้แยกบิกเอนเดียน (FE FF) ออกจากลิตเทิลเอนเดียน (FF FE)
ใน UTF-8 ไม่จำเป็นต้องมี BOM เนื่องจาก UTF-8 ไม่มีปัญหาเรื่องลำดับไบต์ แต่ซอฟต์แวร์ Windows บางชนิดยังคงเพิ่มเครื่องหมายนี้ ซึ่งก่อให้เกิดปัญหาในแอปพลิเคชันการเข้ารหัสลับที่ถือว่า BOM เป็นข้อมูลแทนที่จะเป็นเครื่องหมาย
เหตุใดการเข้ารหัสจึงสำคัญในการเข้ารหัสลับ
ฟังก์ชันแฮชและรหัสยืนยันข้อความทำงานกับลำดับไบต์ ไม่ใช่อักขระนามธรรม สตริงเดียวกันอย่าง "café" จะถูกเข้ารหัสแตกต่างกันใน UTF-8 (4 ไบต์: 63 61 66 C3 A9) เมื่อเทียบกับ Latin-1 (4 ไบต์: 63 61 66 E9)
หากระบบสองระบบคำนวณแฮชของสตริงเดียวกันแต่ใช้การเข้ารหัสต่างกัน ระบบจะได้แฮชต่างกันและการยืนยันตัวตนจะล้มเหลว โปรโตคอลการเข้ารหัสลับต้องระบุการเข้ารหัสไว้อย่างชัดเจนเพื่อให้ทำงานร่วมกันได้
อีโมจิใน UTF-8
อีโมจิเป็นอักขระ Unicode ในระนาบหลายภาษาส่วนเสริม อีโมจิ "ใบหน้ายิ้มยิงฟัน" (U+1F600) เข้ารหัสเป็น 4 ไบต์ใน UTF-8: F0 9F 98 80
ในบริบทความปลอดภัย อีโมจิและอักขระ Unicode แบบเต็มความกว้างถูกใช้ในการโจมตีแบบอักษรพ้องรูป โดยที่ที่อยู่ URL อย่าง "xn--pple-43d.com" (ซึ่งดูเหมือน "apple.com") หลอกให้ผู้ใช้เข้าเว็บไซต์อันตราย
การทำให้ Unicode อยู่ในรูปแบบมาตรฐานและการเข้ารหัสลับ
อักขระบางตัวสามารถแทนได้ด้วยรูปแบบ Unicode หลายรูปแบบ "e ที่มีเครื่องหมายเน้นเสียงเฉียบพลัน" อาจเป็น U+00E9 (อักขระประกอบสำเร็จ) หรือ U+0065 U+0301 (e ตามด้วยเครื่องหมายเน้นเสียงแบบผสม ซึ่งเป็นรูปแบบแยกส่วน) รูปแบบเหล่านี้ดูเหมือนกันทุกประการ แต่มีการแทนค่าเป็นไบต์แตกต่างกัน
ระบบการเข้ารหัสลับที่ไม่ทำให้ Unicode อยู่ในรูปแบบมาตรฐานก่อนคำนวณแฮช อาจสร้างแฮชต่างกันสำหรับสตริงที่ดูเหมือนกัน NFKC เป็นรูปแบบมาตรฐานที่มักแนะนำให้ใช้ก่อนดำเนินการเข้ารหัสลับกับข้อความ
การเลือกการเข้ารหัสที่เหมาะสมสำหรับการเข้ารหัสลับ
เมื่อพัฒนาระบบการเข้ารหัสลับ การเลือกการเข้ารหัสเป็นการตัดสินใจสำคัญที่ต้องจัดทำเอกสารไว้ ควรเข้ารหัสรหัสผ่านเป็น UTF-8 ก่อนคำนวณแฮช ฟิลด์ของโปรโตคอลควรระบุการเข้ารหัสไว้ในเอกสารข้อกำหนด
ความล้มเหลวในการทำงานร่วมกันซึ่งเกิดจากการเข้ารหัสไม่ตรงกันเป็นแหล่งที่มาของข้อผิดพลาดที่พบบ่อยในระบบการเข้ารหัสลับ การนำโปรโตคอลเดียวกันไปใช้งานสองแบบอาจให้ผลการยืนยันตัวตนต่างกัน หากเข้ารหัสสตริงไม่เหมือนกัน
แบบทดสอบการเข้ารหัส UTF-8
ทดสอบความเข้าใจของคุณเกี่ยวกับการเข้ารหัส UTF-8
ประเด็นสำคัญ: การเข้ารหัสข้อความ
ASCII ครอบคลุมอักขระ 128 ตัวด้วย 7 บิต Unicode จัดให้มีพื้นที่จุดรหัสสากลสำหรับระบบอักษรทั้งหมดของมนุษย์ UTF-8 เข้ารหัส Unicode ด้วยไบต์ 1-4 ไบต์ โดยมี ASCII เป็นชุดย่อยที่ใช้ไบต์เดียว
ในการเข้ารหัสลับ การเข้ารหัสมีความสำคัญเพราะฟังก์ชันแฮชทำงานกับไบต์ ข้อความเดียวกันที่ใช้การเข้ารหัสต่างกันจะให้แฮชต่างกัน การทำให้ Unicode อยู่ในรูปแบบมาตรฐานเป็นสิ่งจำเป็นก่อนดำเนินการเข้ารหัสลับกับข้อความ
คำถามที่พบบ่อย
บทเรียน “ASCII, Unicode และการแทนข้อความ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ASCII, Unicode และการแทนข้อความ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ASCII, Unicode และการแทนข้อความ”
ทำความเข้าใจว่าข้อความกลายเป็นไบต์ได้อย่างไร และเหตุใดการเข้ารหัสอักขระจึงสำคัญในบริบทของการเข้ารหัสลับ คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “ASCII, Unicode และการแทนข้อความ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม
ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเข้ารหัส Base64: ทำงานอย่างไร
- ASCII, Unicode และการแทนข้อความ
- เลขฐานสิบหกในผลลัพธ์การเข้ารหัสลับ
- การเข้ารหัสกับการเข้ารหัสลับและการทำแฮช