วัตถุประสงค์ของการเข้ารหัส 64 ฐานคืออะไรและเหตุใดจึงใช้ใน HTTP Basic Authentication


129

ฉันไม่ได้รับการเข้ารหัส Base64

ถ้าใครสามารถถอดรหัสสตริง Base64 มันมีจุดประสงค์อะไร?

เหตุใดจึงใช้ HTTP Basic auth

เหมือนกับการบอกคนอื่นว่ารหัสผ่านของฉันกลับเป็น OLLEH

คนที่เห็น OLLEH จะรู้ว่ารหัสผ่านเดิมคือ HELLO




10
base64 ไม่ใช่การเข้ารหัส แต่เป็นการเข้ารหัส
n611x007

คำตอบ:


249

Base64 ไม่ใช่การเข้ารหัส - เป็นการเข้ารหัส เป็นวิธีการแสดงข้อมูลไบนารีโดยใช้อักขระ (ข้อความ) ที่พิมพ์ได้เท่านั้น

ดูย่อหน้านี้จากหน้าวิกิพีเดียสำหรับ HTTP Basic Authentication :

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


4
นอกจากนี้ก็ดูเหมือนว่าตัวละครที่เกี่ยวข้องการเข้ารหัสที่จะได้รับ 'ข้อมูลไบนารี' จากสตริงควรจะเป็นISO-8859-1 (ที่มา )
Myobis

60

ปกติเรียกว่าการเข้ารหัส base64 ไม่ใช่การเข้ารหัส! สิ่งที่ดีเกี่ยวกับการเข้ารหัส base64 คือช่วยให้คุณสามารถแสดงข้อมูล (ไบนารี) โดยใช้เพียงชุดย่อยที่มีอยู่ซึ่งมีอยู่อย่าง จำกัด ซึ่งมีประสิทธิภาพมากกว่าการเขียนสตริง 1s และ 0s เป็น ASCII


6
+1 แต่เมื่อเปรียบเทียบกับการจัดเก็บข้อมูลใน 1 วินาทีแล้วสตรีม 0s ก็เกินจริงเกินไป เปรียบเทียบกับการจัดเก็บข้อมูลในรูปแบบฐานสิบหกจะดีกว่า เนื่องจากฐานสิบหกจะสร้างx2ไบต์ได้มากกว่าสตรีมดั้งเดิมเท่านั้นและ 1s, 0s - ทำให้x8ไบต์เพิ่มขึ้นหลายเท่า (และ Base64 สร้างx1.3ข้อมูลมากกว่าอาร์เรย์ไบต์เดิม) ดังนั้นบางครั้งจึงเป็นที่ยอมรับในการเข้ารหัสสตรีมไบนารีเป็นสตริงฐานสิบหกโดยเพิ่มจำนวนไบต์เป็นสองเท่าตัวอย่างเช่นเพื่อเก็บแฮชรหัสผ่านในฐานข้อมูล
Agnius Vasiliauskas

30

En crypt ionต้องการคีย์ (สตริงหรืออัลกอริทึม) เพื่อถอดรหัส ด้วยเหตุนี้ "crypt" (ราก: การเข้ารหัส )

En codไอเอ็นจีปรับเปลี่ยน / กะ / เปลี่ยนแปลงรหัสตัวละครเข้าไปอีก ในกรณีนี้ข้อมูลไบต์ปกติสามารถแสดงและขนส่งได้อย่างง่ายดายโดยใช้ HTTP


5
การเข้ารหัสหมายถึง "การแสดงผลที่ซ่อนอยู่" - การเข้ารหัสตามคีย์เป็นสิ่งประดิษฐ์ล่าสุด การเข้ารหัสเป็นรูปแบบหนึ่งของการเข้ารหัสที่ใช้เป็นการเข้ารหัส (แม้ว่าจะไม่ใช่ใครก็ตามที่มีอายุมากกว่า 12 ปีเป็นเวลาหลายร้อยปี)

2
การเข้ารหัสในภาษาใช้เพื่ออ้างถึงโหมดล่าสุดของการเข้ารหัสโดยเฉพาะการเข้ารหัสคอมพิวเตอร์ซึ่งเป็นคีย์ตาม (คีย์สาธารณะ / ส่วนตัว) แม้ว่าจะเป็นความจริง แต่ก็ไม่จำเป็นที่จะต้องชี้ให้เห็นความหมายตามตัวอักษรของคำวันที่ มิฉะนั้นคุณจะเถียงคำจำกัดความทางประวัติศาสตร์ของคำภาษาอังกฤษจำนวนมากที่ใช้ในปัจจุบัน ภาษาพื้นถิ่น (และบางครั้งก็เป็นภาษาพูด) คือสิ่งที่ให้บริบทของคำและคำจำกัดความ
vol7ron

1
ฉันไม่คิดว่าคุณฟังดูหยาบคาย ฉันเห็นด้วยกับประเด็นของคุณเกี่ยวกับบริบทสมัยใหม่ คำและคำจำกัดความมีการพัฒนาอย่างต่อเนื่อง ฉันคิดว่า "เข้ารหัส" และ "เข้ารหัส" มีคำจำกัดความสองคำที่แตกต่างกันมากในคอมพิวเตอร์สมัยใหม่และคำตอบของคุณช่วยให้สรุปความแตกต่างได้ดี
Dan Bechard

การเข้ารหัส Base64 เป็นรูปแบบหนึ่งของการทำให้สับสนซึ่งหมายถึงการแสดงผลที่ไม่ชัดเจน สำหรับแอปพลิเคชั่นจำนวนมากนี่เป็นการเข้ารหัสที่เพียงพอซึ่งเป้าหมายคือเพียงเพื่อทำลายข้อความที่ชัดเจนใด ๆ ที่ส่งผ่านสาย
Dominic Cerisano

6
@DominicCerisano: ไม่การเข้ารหัส base64 ไม่นับเป็นการเข้ารหัสและฉันหวังว่าคุณจะไม่ใช้มันเพื่อปกป้องอะไร
Ry-

19

ในภาษาประจำวัน "รหัส" เป็นความลับ ในทางวิทยาศาสตร์และวิศวกรรมรหัสเป็นเพียงข้อตกลงชุดของกฎวิธีการเขียนบางสิ่ง

รหัสนั้นอาจเป็นความลับ ในกรณีนี้เรียกว่าการเข้ารหัส แต่โดยทั่วไปรหัสไม่ได้เป็นความลับ รับรหัสพันธุกรรม. มันก็ระบุว่าดีเอ็นเอของเราถูกสร้างขึ้นจากสี่ฐานที่แตกต่างกัน -  A, C, GและTและที่สามฐานนำมารวมกันในรูปแบบหนึ่งในกรดอะมิโน นอกจากนี้ยังมีตารางที่ตัวอักษรสามตัวเป็นกรดอะมิโน

ไม่มีความลับเกี่ยวกับรหัสนี้

ในทำนองเดียวกัน Base64 ไม่ใช่รหัสลับ แต่เป็นรหัสที่อนุญาตให้จัดเก็บข้อมูลในหกบิตต่ออักขระ (ดังนั้นจึงมี 64 เอนทิตีที่แตกต่างกันกล่าวคือ "ฐาน" ของระบบคือ 64 เช่นเดียวกับฐานของระบบฐานสิบของเราคือ 10 เนื่องจากมี 10 เอนทิตีที่แตกต่างกัน เรียกว่า "หลัก")



17

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

มีโฮสต์ที่แตกต่างกันมากมายใน intertubes และคุณไม่สามารถรองรับสิ่งอื่นใดนอกจาก ASCII แบบ 7 บิตโดยไม่เสี่ยงต่อการสูญหายของข้อมูล / ความสับสน

ตัวอย่างเช่นเมนเฟรมของ IBM ใช้การเข้ารหัสที่เรียกว่า EBCDIC (ซึ่งมีหลายรสชาติที่แตกต่างกัน) จุดรหัสนั้นแตกต่างอย่างสิ้นเชิงกับจุดรหัสที่ใช้โดย 'พเตอร์ที่ใช้ ASCII - ใน ASCII ตัวอักษร AZ คือ 0x41 - 0x5A ใน EBCDIC ตัวอักษร A - Z ไม่ได้อยู่ในช่วงที่อยู่ติดกัน: ตัวอักษร AI อยู่ที่ 0xC1 - 0xC9 ตัวอักษร JR อยู่ที่ 0xD1 - 0xD9 และตัวอักษร SZ อยู่ที่ 0xE2 - 0xE9


1

ตามค่าเริ่มต้นพารามิเตอร์ฟิลด์ส่วนหัวของข้อความในข้อความ Hypertext Transfer Protocol (HTTP) ไม่สามารถนำอักขระนอกชุดอักขระ ISO- 8859-1

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.