ฉันได้ยินคนพูดถึง "การเข้ารหัสฐาน 64" ที่นี่และที่นั่น ใช้ทำอะไร?
ฉันได้ยินคนพูดถึง "การเข้ารหัสฐาน 64" ที่นี่และที่นั่น ใช้ทำอะไร?
คำตอบ:
เมื่อคุณมีข้อมูลไบนารีบางอย่างที่คุณต้องการจัดส่งผ่านเครือข่ายโดยทั่วไปคุณจะไม่ทำเพียงแค่สตรีมบิตและไบต์ผ่านสายในรูปแบบ raw ทำไม? เพราะสื่อบางอย่างถูกสร้างขึ้นเพื่อการสตรีมข้อความ คุณไม่มีทางรู้ได้ - โปรโตคอลบางอย่างอาจตีความข้อมูลไบนารีของคุณเป็นอักขระควบคุม (เช่นโมเด็ม) หรือข้อมูลไบนารีของคุณอาจเมาเพราะโปรโตคอลพื้นฐานอาจคิดว่าคุณได้ป้อนชุดอักขระพิเศษ (เช่นวิธี FTP แปลบรรทัด ตอนจบ)
เพื่อให้ได้สิ่งนี้ผู้คนเข้ารหัสข้อมูลไบนารี่เป็นตัวละคร Base64 เป็นหนึ่งในการเข้ารหัสประเภทนี้
ทำไมต้อง 64
เนื่องจากโดยทั่วไปคุณสามารถพึ่งพา 64 ตัวอักษรเดียวกันกับที่มีอยู่ในชุดอักขระจำนวนมากและคุณสามารถมั่นใจได้อย่างมีเหตุผลว่าข้อมูลของคุณจะจบลงที่อีกด้านหนึ่งของสายที่ไม่ถูกขัดจังหวะ
มันเป็นวิธีการเข้ารหัสข้อมูลไบนารีโดยพลการในข้อความ ASCII ใช้เวลา 4 ตัวอักษรต่อข้อมูล 3 ไบต์รวมทั้งอาจมีช่องว่างภายในเล็กน้อย
เป็นหลักแต่ละ 6 บิตของการป้อนข้อมูลจะถูกเข้ารหัสในตัวอักษร 64 ตัวอักษร ตัวอักษร "มาตรฐาน" ใช้ AZ, az, 0-9 และ + และ /, กับ = เป็นอักขระตัวรอง มีตัวแปรที่ปลอดภัยต่อ URL
Wikipediaเป็นแหล่งข้อมูลที่ดีพอสมควร
binary strings
เรียกพวกเขา (ที่มา) php.net/manual/en/function.pack.php
การเข้ารหัส Base-64 เป็นวิธีหนึ่งในการรับข้อมูลไบนารีและเปลี่ยนเป็นข้อความเพื่อให้สามารถส่งได้ง่ายขึ้นในสิ่งต่าง ๆ เช่นอีเมลและข้อมูลฟอร์ม HTML
มันเป็นการเข้ารหัสข้อความของข้อมูลไบนารีที่ข้อความผลลัพธ์ไม่มีอะไรนอกจากตัวอักษรตัวเลขและสัญลักษณ์ "+", "/" และ "=" มันเป็นวิธีที่สะดวกในการจัดเก็บ / ส่งข้อมูลไบนารีผ่านสื่อที่ใช้สำหรับข้อมูลที่เป็นข้อความโดยเฉพาะ
แต่ทำไม Base-64 ทางเลือกสองทางสำหรับการแปลงข้อมูลไบนารีเป็นข้อความที่คิดได้ทันทีคือ:
Base-64 แมป 3 ไบต์ (8 x 3 = 24 บิต) ใน 4 ตัวอักษรที่ยาว 6-bits (6 x 4 = 24 บิต) ผลลัพธ์ดูเหมือน "TWFuIGlzIGRpc3Rpb ... " ดังนั้น bloating จึงเป็นเพียง 4/3 = 1.3333333 เท่าของแท้
นอกเหนือจากสิ่งที่กล่าวไปแล้วการใช้งานทั่วไปสองอย่างที่ไม่ได้อยู่ในรายการคือ
hashes:
แฮชเป็นฟังก์ชันทางเดียวที่แปลงบล็อกของไบต์เป็นบล็อกขนาดอื่นที่มีขนาดคงที่เช่น 128 บิตหรือ 256 บิต (SHA / MD5) การแปลงไบต์ที่เป็นผลลัพธ์ให้เป็น Base64 ทำให้ง่ายยิ่งขึ้นในการแสดงแฮชโดยเฉพาะเมื่อคุณเปรียบเทียบการตรวจสอบความสมบูรณ์ มักพบเห็นแฮชใน Base64 ซึ่งหลายคนเข้าใจผิดว่า Base64 นั้นเป็นแฮช
Cryptography:
เนื่องจากคีย์การเข้ารหัสไม่จำเป็นต้องเป็นข้อความ แต่เป็นไบต์ที่บางครั้งจำเป็นต้องเก็บไว้ในไฟล์หรือฐานข้อมูลซึ่ง Base64 มีประโยชน์ เหมือนกับไบต์ที่เข้ารหัสที่ได้
โปรดทราบว่าแม้ว่า Base64 มักใช้ในการเข้ารหัสไม่ใช่กลไกความปลอดภัย ทุกคนสามารถแปลงสตริง Base64 กลับไปเป็นไบต์ดั้งเดิมดังนั้นจึงไม่ควรใช้เป็นวิธีในการปกป้องข้อมูลเฉพาะรูปแบบที่จะแสดงหรือจัดเก็บไบต์ดิบได้ง่ายขึ้น
ใบรับรอง
ใบรับรอง x509 ในรูปแบบ PEM ถูกเข้ารหัสพื้นฐาน 64 http://how2ssl.com/articles/working_with_pem_files/
หลายปีที่ผ่านมาเมื่อมีการเปิดใช้งานฟังก์ชันการส่งจดหมายดังนั้นเมื่อใช้เวลานานจึงจำเป็นต้องมีไฟล์แนบเช่นรูปภาพและสื่อ (เสียงวิดีโอเป็นต้น) เมื่อสิ่งที่แนบเหล่านี้ถูกส่งผ่านอินเทอร์เน็ต (ซึ่งโดยทั่วไปจะอยู่ในรูปแบบของข้อมูลไบนารี) ความน่าจะเป็นของข้อมูลไบนารีที่ได้รับความเสียหายสูงในรูปแบบดิบ ดังนั้นเพื่อจัดการกับปัญหานี้ BASE64 จึงเข้ามา
ปัญหาเกี่ยวกับข้อมูลไบนารีคือมันมีตัวละคร null ซึ่งในบางภาษาเช่น C, C ++ หมายถึงจุดสิ้นสุดของสตริงอักขระดังนั้นการส่งข้อมูลไบนารีในรูปแบบดิบที่มี NULL ไบต์จะหยุดไฟล์จากการอ่านอย่างเต็มที่และนำไปสู่ข้อมูลที่เสียหาย
ตัวอย่างเช่น :
ใน C และ C ++ อักขระ "null" นี้แสดงจุดสิ้นสุดของสตริง ดังนั้น "HELLO" จึงถูกจัดเก็บไว้เช่นนี้:
สวัสดี
72 69 76 76 79 00
00 บอกว่า "หยุดที่นี่"
ทีนี้มาดูกันว่าการเข้ารหัส BASE64 ทำงานอย่างไร
จุดที่ควรสังเกต: ความยาวของสตริงควรเป็นหลายเท่าของ 3
ตัวอย่างที่ 1:
สตริงที่จะเข้ารหัส:“ เอซ”, ความยาว = 3
1) แปลงอักขระแต่ละตัวให้เป็นทศนิยม
a = 97, c = 99, e = 101
2) เปลี่ยนทศนิยมแต่ละทศนิยมเป็น 8 บิต
97 = 01100001, 99 = 01100011, 101 = 01100101
รวมกัน: 01100001 01100011 01100101
3) แยกเป็นกลุ่ม 6 บิต
011000 010110 001101 100101
4) คำนวณเลขฐานสองเป็นทศนิยม
011000 = 24, 010110 = 22, 001101 = 13, 100101 = 37
5) แปลงอักขระทศนิยมให้เป็น base64 โดยใช้แผนภูมิ base64
24 = Y, 22 = W, 13 = N, 37 = l
“ ace” =>“ YWNl”
ตัวอย่างที่ 2:
สตริงที่จะเข้ารหัส:“ abcd” ความยาว = 4, มันไม่ได้เป็นหลายเท่าของ 3 ดังนั้นเพื่อให้ความยาวสตริงหลายเท่าของ 3 เราต้องเพิ่มการเติม 2 บิตเพื่อให้ความยาว = 6. บิตการแพ็ดจะแสดงด้วยเครื่องหมาย“ =”
ข้อสังเกต: บิต padding หนึ่งเท่ากับสองศูนย์ 00 ดังนั้นสองบิต padding เท่ากับสี่ศูนย์ 0000
ดังนั้นให้เริ่มกระบวนการ: -
1) แปลงอักขระแต่ละตัวให้เป็นทศนิยม
a = 97, b = 98, c = 99, d = 100
2) เปลี่ยนทศนิยมแต่ละทศนิยมเป็น 8 บิต
97 = 01100001, 98 = 01100010, 99 = 01100011, 100 = 01100100
3) แยกเป็นกลุ่ม 6 บิต
011000, 010110, 001001, 100011, 011001, 00
ดังนั้น 6-bit สุดท้ายจึงไม่สมบูรณ์ดังนั้นเราจึงใส่ padding สองบิตซึ่งเท่ากับสี่ศูนย์“ 0000”
011000, 010110, 001001, 100011, 011001, 000000 ==
ตอนนี้มันเท่ากัน เครื่องหมายเท่ากับสองที่ท้ายแสดงว่ามีการเพิ่ม 4 ศูนย์ (ช่วยในการถอดรหัส)
4) คำนวณเลขฐานสองเป็นทศนิยม
011000 = 24, 010110 = 22, 001001 = 9, 100011 = 35, 011001 = 25, 000000 = 0 ==
5) แปลงอักขระทศนิยมให้เป็น base64 โดยใช้แผนภูมิ base64
24 = Y, 22 = W, 9 = j, 35 = j, 25 = Z, 0 = A ==
“ abcd” =>“ YWJjZA ==”
ในยุคแรก ๆ ของคอมพิวเตอร์เมื่อการสื่อสารระหว่างสายโทรศัพท์ไม่น่าเชื่อถือเป็นพิเศษวิธีการตรวจสอบความถูกต้องของข้อมูลที่รวดเร็วและสกปรกก็คือ "bit parity" ในวิธีนี้ทุกไบต์ที่ส่งจะมีข้อมูล 7 บิตและที่ 8 จะเป็น 1 หรือ 0 เพื่อบังคับให้จำนวนทั้งหมด 1 บิตในไบต์จะเท่ากัน
ดังนั้น 0x01 จะถูกส่งเป็น 0x81 0x02 จะเป็น 0x82; 0x03 จะยังคงเป็น 0x03 เป็นต้น
เพื่อเพิ่มเติมระบบนี้เมื่อกำหนดชุดอักขระ ASCII จะมีการกำหนดอักขระเพียง 00-7F เท่านั้น (จนถึงทุกวันนี้ตัวละครทั้งหมดที่อยู่ในช่วง 80-FF นั้นไม่ได้มาตรฐาน)
เราเตอร์หลายคนในวันนี้ทำการตรวจสอบพาริตีและการแปลไบต์เป็นฮาร์ดแวร์บังคับให้คอมพิวเตอร์ที่เชื่อมต่อกับพวกเขาจัดการกับข้อมูล 7 บิตอย่างเคร่งครัด ไฟล์แนบอีเมลนี้บังคับ (และข้อมูลอื่น ๆ ทั้งหมดซึ่งเป็นสาเหตุที่โปรโตคอล HTTP และ SMTP เป็นข้อความ) จะถูกแปลงเป็นรูปแบบข้อความอย่างเดียว
เราเตอร์เพียงไม่กี่ตัวที่รอดชีวิตมาได้ในยุค 90 ฉันสงสัยอย่างรุนแรงว่าวันนี้พวกเขาจะใช้งาน
จากhttp://en.wikipedia.org/wiki/Base64
คำว่า Base64 หมายถึงการเข้ารหัสการถ่ายโอนเนื้อหา MIME ที่เฉพาะเจาะจง มันยังใช้เป็นคำทั่วไปสำหรับรูปแบบการเข้ารหัสใด ๆ ที่คล้ายกันที่เข้ารหัสข้อมูลไบนารี่โดยปฏิบัติกับตัวเลขและแปลเป็นฐาน 64 ตัวเลือกฐานเฉพาะนั้นเกิดจากประวัติของการเข้ารหัสชุดอักขระ: เราสามารถเลือกชุดของอักขระได้ 64 ตัวซึ่งเป็นส่วนหนึ่งของเซ็ตย่อยทั่วไปที่เข้ารหัสส่วนใหญ่และสามารถพิมพ์ได้ ชุดค่าผสมนี้ทำให้ข้อมูลไม่น่าจะถูกแก้ไขในระหว่างการขนส่งผ่านระบบเช่นอีเมลซึ่งโดยทั่วไปแล้วจะไม่ทำความสะอาด 8 บิต
Base64 สามารถใช้ได้ในหลากหลายบริบท:
- Evolution และ Thunderbird ใช้ Base64 เพื่อทำให้รหัสผ่านอีเมล์แย่ลง [1]
- Base64 สามารถใช้ในการส่งและเก็บข้อความที่อาจทำให้เกิดการขัดแย้งกันของตัวคั่น
Base64 มักใช้เป็นทางลัดที่รวดเร็ว แต่ไม่ปลอดภัยในการปิดบังความลับโดยไม่ทำให้เกิดค่าใช้จ่ายในการจัดการคีย์เข้ารหัส
ผู้ส่งอีเมลขยะใช้ Base64 เพื่อหลีกเลี่ยงเครื่องมือป้องกันสแปมขั้นพื้นฐานซึ่งมักจะไม่ถอดรหัส Base64 ดังนั้นจึงไม่สามารถตรวจจับคำหลักในข้อความที่เข้ารหัสได้
- Base64 ใช้เพื่อเข้ารหัสสตริงอักขระในไฟล์ LDIF
- Base64 บางครั้งใช้เพื่อฝังข้อมูลไบนารีในไฟล์ XML โดยใช้ไวยากรณ์คล้ายกับ ...... เช่น bookmarks.html ของ Firefox
- Base64 ยังใช้เมื่อสื่อสารกับอุปกรณ์การพิมพ์ลายเซ็นทางการคลังของรัฐบาล (โดยทั่วไปผ่านพอร์ตอนุกรมหรือพอร์ตขนาน) เพื่อลดความล่าช้าเมื่อถ่ายโอนอักขระใบเสร็จรับเงินสำหรับการเซ็นชื่อ
- Base64 ใช้ในการเข้ารหัสไฟล์ไบนารีเช่นรูปภาพภายในสคริปต์เพื่อหลีกเลี่ยงการพึ่งพาไฟล์ภายนอก
- สามารถใช้เพื่อฝังข้อมูลภาพดิบลงในคุณสมบัติ CSS เช่นภาพพื้นหลัง
โปรโตคอลการขนส่งบางตัวอนุญาตให้ส่งตัวอักษรและตัวเลขได้เท่านั้น ลองนึกภาพสถานการณ์ที่มีการใช้อักขระควบคุมเพื่อกระตุ้นการทำงานพิเศษและ / หรือที่รองรับความกว้างบิตที่ จำกัด ต่อตัวละครเท่านั้น Base64แปลงอินพุตใด ๆ เป็นการเข้ารหัสที่ใช้อักขระตัวอักษรและตัวเลข+
เท่านั้น/
และ=
เป็นอักขระการขยาย
การใช้งาน Base64 ฉันจะอธิบายที่นี่ค่อนข้างแฮ็ค ดังนั้นหากคุณไม่ชอบแฮ็กโปรดอย่าดำเนินการต่อไป
ฉันพบปัญหาเมื่อฉันค้นพบว่า utf8 ของ MySQL ไม่รองรับอักขระแบบ 4 ไบต์ unicode เนื่องจากมันใช้ utf8 เวอร์ชัน 3 ไบต์ ดังนั้นสิ่งที่ฉันทำเพื่อสนับสนุน Unicode 4 ไบต์เต็มรูปแบบเหนือ utf8 ของ MySQL? สตริง64เข้ารหัสดีเมื่อจัดเก็บลงในฐานข้อมูลและถอดรหัส base64 เมื่อดึงข้อมูล
เนื่องจากการเข้ารหัสและถอดรหัส base64 นั้นเร็วมาก
คุณมีประเด็นต่อไปนี้ที่ควรทราบ:
การเข้ารหัส Base64 ใช้พื้นที่เก็บข้อมูลเพิ่มขึ้น 33%
สตริงที่เก็บในฐานข้อมูลจะไม่สามารถอ่านได้โดยมนุษย์ (คุณสามารถขายได้ว่าเป็นคุณสมบัติที่สตริงฐานข้อมูลใช้รูปแบบการเข้ารหัสพื้นฐาน)
คุณสามารถใช้วิธีการด้านบนสำหรับเอนจินการจัดเก็บใด ๆ ที่ไม่รองรับยูนิโค้ด
utf8
ประเภทของพวกเขายังคงเป็นสามไบต์เท่านั้น utf8mb4
ถ้าคุณต้องการสิ่งที่จริงการใช้งาน แฮ็คที่ดี แต่ไม่จำเป็นอีกต่อไป
มันใช้สำหรับการแปลงข้อมูลไบนารีโดยพลการเป็นข้อความ ASCII
ตัวอย่างเช่นสิ่งที่แนบมากับอีเมลจะถูกส่งด้วยวิธีนี้
ฉันใช้มันในทางปฏิบัติเมื่อเราถ่ายโอนวัตถุไบนารีขนาดใหญ่ (ภาพ) ผ่านบริการบนเว็บ ดังนั้นเมื่อฉันทดสอบบริการเว็บ C # โดยใช้สคริปต์ไพ ธ อนวัตถุไบนารีสามารถสร้างขึ้นใหม่ได้ด้วยเวทมนตร์เล็กน้อย
[ในหลาม]
import base64
imageAsBytes = base64.b64decode( dataFromWS )
“ รูปแบบการเข้ารหัส Base64 มักใช้เมื่อมีความจำเป็นในการเข้ารหัสข้อมูลไบนารีที่จำเป็นต้องจัดเก็บและถ่ายโอนผ่านสื่อที่ออกแบบมาเพื่อจัดการกับข้อมูลที่เป็นข้อความ นี่คือเพื่อให้แน่ใจว่าข้อมูลยังคงไม่เปลี่ยนแปลงระหว่างการขนส่ง” (Wiki, 2017)
ตัวอย่างอาจเป็นดังต่อไปนี้: คุณมีเว็บเซอร์วิสที่ยอมรับเฉพาะ ASCII chars คุณต้องการบันทึกแล้วโอนข้อมูลของผู้ใช้ไปยังตำแหน่งอื่น (API) แต่ผู้รับต้องการรับข้อมูลที่ไม่ถูกแตะต้อง Base64 สำหรับสิ่งนั้น . . ข้อเสียเพียงอย่างเดียวคือการเข้ารหัส base64 จะต้องการพื้นที่ว่างมากกว่าสตริงปกติประมาณ 33%
อีกตัวอย่างหนึ่ง :: uenc = เข้ารหัส URL = = aHR0cDovL2xvYy5tYWdlbnRvLmNvbS9hc2ljcy1tZW4tcy1nZWwta2F5YW5vLXhpaS5odG1s http://loc.querytip.com/asics-men-s-gel-kayano-xii.html
อย่างที่คุณเห็นเราไม่สามารถใส่อักขระ“ /” ใน URL หากเราต้องการส่ง URL ที่เยี่ยมชมล่าสุดเป็นพารามิเตอร์เพราะเราจะทำลายกฎแอตทริบิวต์ / ค่าสำหรับ“ MOD เขียนใหม่” - พารามิเตอร์ GET
ตัวอย่างเต็มรูปแบบจะเป็น:“ http://loc.querytip.com/checkout/cart/add/uenc/http://loc.magento.com/asics-men-s-gel-kayano-xii.html/product / 93 / ”
ส่วนใหญ่ฉันเคยเห็นมันใช้ในการเข้ารหัสข้อมูลไบนารีในบริบทที่สามารถจัดการกับ ASCII หรือชุดอักขระที่เรียบง่าย
หากต้องการขยายสิ่งที่แบรดพูด: กลไกการขนส่งจำนวนมากสำหรับอีเมลและ Usenet และวิธีการย้ายข้อมูลอื่น ๆ ไม่ใช่ "8 บิตที่สะอาด" ซึ่งหมายความว่าอักขระที่อยู่นอกชุดอักขระ ASCII มาตรฐานอาจมีปัญหาในการขนส่ง - ตัวอย่างเช่น 0x0D อาจถูกมองว่าเป็น carriage return และกลายเป็น carriage return และ line feed Base 64 ทำการแมปอักขระไบนารีทั้งหมดลงในตัวอักษรและตัวเลขมาตรฐาน ASCII หลายตัวและเครื่องหมายวรรคตอนเพื่อไม่ให้ถูกรบกวนด้วยวิธีนี้
Base64
Base64 เป็นคำทั่วไปสำหรับชุดรูปแบบการเข้ารหัสที่คล้ายกันจำนวนหนึ่งซึ่งเข้ารหัสข้อมูลแบบไบนารีโดยทำการคำนวณเป็นตัวเลขและแปลเป็นฐาน 64 คำ Base64 มาจากการเข้ารหัสการถ่ายโอนเนื้อหา MIME ที่ระบุ
รูปแบบการเข้ารหัส Base64 มักใช้เมื่อมีความจำเป็นในการเข้ารหัสข้อมูลไบนารีที่ต้องการจัดเก็บและถ่ายโอนผ่านสื่อที่ออกแบบมาเพื่อจัดการกับข้อมูลที่เป็นข้อความ นี่คือเพื่อให้แน่ใจว่าข้อมูลยังคงไม่เปลี่ยนแปลงโดยระหว่างการขนส่ง Base64 ใช้กันทั่วไปในแอปพลิเคชั่นจำนวนมากรวมถึงอีเมลผ่าน MIME และจัดเก็บข้อมูลที่ซับซ้อนใน XML
Base64 สามารถใช้งานได้หลายวัตถุประสงค์
เหตุผลหลักคือการแปลงข้อมูลไบนารีเป็นสิ่งที่ผ่านได้
บางครั้งฉันใช้มันเพื่อส่งผ่านข้อมูล JSON จากเว็บไซต์หนึ่งไปยังอีกไซต์หนึ่งเก็บข้อมูลในคุกกี้เกี่ยวกับผู้ใช้
หมายเหตุ: คุณ "สามารถ" ใช้สำหรับการเข้ารหัสได้ - ฉันไม่เห็นว่าทำไมคนอื่นบอกว่าคุณทำไม่ได้และนั่นไม่ใช่การเข้ารหัสแม้ว่ามันจะแตกง่ายและขมวดคิ้วอยู่ การเข้ารหัสหมายถึงไม่มีอะไรมากไปกว่าการแปลงสตริงข้อมูลหนึ่งไปเป็นสตริงข้อมูลอื่นที่สามารถถอดรหัสได้ในภายหลังหรือไม่และนั่นคือสิ่งที่ base64 ทำ
เลขฐานสิบหกหนึ่งหลักคือหนึ่ง nibble (4 บิต) สองไส้ทำ 8 บิตซึ่งเรียกว่า 1 ไบต์
MD5 สร้างเอาต์พุต 128- บิตซึ่งแสดงโดยใช้ลำดับเลขฐานสิบหก 32 หลักซึ่งจะเป็น 32 * 4 = 128 บิต 128 บิตทำ 16 ไบต์ (ตั้งแต่ 1 ไบต์คือ 8 บิต)
อักขระ Base64 แต่ละตัวเข้ารหัส 6 บิต (ยกเว้นอักขระที่ไม่ใช่แผ่นสุดท้ายซึ่งสามารถเข้ารหัส 2, 4 หรือ 6 บิตและอักขระแผ่นสุดท้ายหากมี) ดังนั้นตามการเข้ารหัส Base64 แฮชแบบ 128 บิตต้องการอย่างน้อย⌈128 / 6⌉ = 22 ตัวอักษรรวมทั้งแพดหากมี
ด้วย base64 เราสามารถสร้างเอาท์พุทที่เข้ารหัสตามความยาวที่ต้องการ (6, 8, หรือ 10) หากเราเลือกที่จะตัดสินใจเอาต์พุต 8 ถ่านแบบยาวมันจะใช้งานเพียง 8 ไบต์ในขณะที่มันใช้ 16 ไบต์สำหรับเอาต์พุตแฮช 128 บิต
นอกจากการรักษาความปลอดภัยแล้วการเข้ารหัส base64 ยังใช้เพื่อลดพื้นที่ที่ใช้ไป