Base64 kodlamanın gerçek amacı nedir?


83

Neden Base64 kodlamamız var? Ben bir acemiyim ve neden baytları başka bir şeye karıştırdığınızı gerçekten anlamıyorum (şifreleme olmadığı sürece). Okuduğum kitaplardan birinde Base64 kodlaması, ikili aktarımın mümkün olmadığı durumlarda kullanışlıdır. Örneğin. Bir form gönderdiğimizde kodlanır. Ama neden baytları harflere dönüştürüyoruz? Baytları arada bir boşluk bırakarak dize biçimine dönüştüremez miyiz? Örneğin 00000001 00000004? Ya da 0000000100000004baytlar her zaman 8 çifti halinde geldiği için boşluksuz mu?


11
Çünkü base64'te yaptığınız gibi 1 byte'ı 3'ten 4'e 8'e çevirdiniz (eğer bellek bana doğru hizmet ediyorsa). Bant genişliği sonludur.
Brian Roach

Her tür gruplamada gelebilecek kafa karıştırıcı bitler (bir bayt oluşturduğunuz 8 bit ile) ve baytlar.
Denys Séguret

Yanıtlar:


109

Base64, verileri içerikte herhangi bir kayıp veya değişiklik olmadan iletmek için ikili verileri hemen hemen her bilgisayar sistemi tarafından bilinen bir ASCII karakter kümesine kodlamanın bir yoludur. Örneğin, posta sistemleri ASCII (metinsel) verileri bekledikleri için ikili verilerle başa çıkamazlar. Bu nedenle, bir görüntüyü veya başka bir dosyayı aktarmak istiyorsanız, verilerle ilgilenme şekli nedeniyle bozulacaktır.

Not: base64 kodlaması, bir şifreleme yöntemi veya verileri sıkıştırmanın bir yolu DEĞİLDİR. Aslında, base64 ile kodlanmış bir veri parçası, orijinal veri parçasından 1.333… kat daha büyüktür. Bu, aktarım sırasında hiçbir verinin kaybolmadığından veya değiştirilmediğinden emin olmanın bir yoludur.


5
Base64 ile kodlanmış veri, orijinal veriden tam olarak 1.333 (3) kat daha büyüktür + giriş verisinin uzunluğuna bağlı olarak 0-3 ekstra karakter eklenmiştir. Modulo 4. Bunun nedeni, her base64 kodlanmış karakterin 6 bit değerinde bilgi depolamasıdır (64 farklı karakter) .
ayrıca

2
hem öncesi hem de sonrası veriler hala ikilidir. o zaman neden veriler
kaybolur

12

Base64, ikili verilerin yalnızca yazdırılabilir karakterlere izin veren ortamlar üzerinden temsil edilmesini ve aktarılmasını sağlayan bir mekanizmadır. "Temel Kodlama" nın en popüler biçimidir, kullanımda bilinen diğerleri ise Base16 ve Base32'dir.

Base64 gereksinimi, görüntüler, videolar veya rastgele ikili içerik gibi e-postalara ikili içerik ekleme ihtiyacından kaynaklandı. SMTP [RFC 5321], mesajlar içinde yalnızca 7 bitlik US-ASCII karakterlerine izin verdiğinden, bu ikili sekizli akışlarını yedi bit ASCII karakterleri kullanarak temsil etme ihtiyacı vardı ...

Umarım bu soruya cevap verir


3

Base64, her türlü ikili veriyi iletmenin (aslında kodlama, ancak iletme amacıyla) aşağı yukarı kompakt bir yoludur.

Bkz. Http://en.wikipedia.org/wiki/Base64

"Genel kural, çoğu kodlamada ortak olan ve aynı zamanda yazdırılabilir olan bir alt kümenin parçası olan 64 karakterlik bir dizi seçmektir."

Bu çok genel bir amaç ve ortak ihtiyaç, gerekenden daha fazla yer israf etmemek.

Tarihsel olarak, karakterleri baytlar halinde saklamak için kullanılan (neredeyse) tüm kodlamaların ortak bir alt kümesinin olduğu ve 2 ^ 8 olası baytların çoğunun basit veri aktarımı sırasında (örneğin bir kopya- yapıştır-e-posta gönder-e-posta al-kopyala-yapıştır sırası).

(lütfen ek oyu Brian'ın yorumuna yönlendirin, sadece daha eksiksiz ve umarım daha açık hale getiriyorum)


Hayır, daha erken ve tam bir cevap bulmak istemedim. Bu iyi.
Brian Roach
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.