Jaki jest prawdziwy cel kodowania Base64?

83

Dlaczego mamy kodowanie Base64? Jestem początkującym i naprawdę nie rozumiem, dlaczego miałbyś zaciemniać bajty do czegoś innego (chyba że jest to szyfrowanie). W jednej z książek, które przeczytałem, kodowanie Base64 jest przydatne, gdy transmisja binarna nie jest możliwa. Na przykład. Kiedy wysyłamy formularz, jest on zakodowany. Ale dlaczego zamieniamy bajty na litery? Czy nie moglibyśmy po prostu przekonwertować bajtów na format ciągu z odstępem między nimi? Na przykład 00000001 00000004? Lub po prostu 0000000100000004bez spacji, ponieważ bajty zawsze występują w parze po 8?

Jacek
źródło
11
Ponieważ właśnie zamieniłeś 1 bajt na 8, a nie 3 na 4, tak jak robisz to z base64 (jeśli pamięć mi dobrze służy). Przepustowość jest ograniczona.
Brian Roach,
Mylisz bity (z 8 bitami tworzysz bajt) i bajty, które mogą występować w dowolnym rodzaju grupowania.
Denys Séguret

Odpowiedzi:

109

Base64 to sposób na kodowanie danych binarnych do zestawu znaków ASCII, znanego prawie każdemu systemowi komputerowemu, w celu przesyłania danych bez utraty lub modyfikacji samej zawartości. Na przykład systemy pocztowe nie radzą sobie z danymi binarnymi, ponieważ oczekują danych ASCII (tekstowych). Jeśli więc chcesz przesłać obraz lub inny plik, zostanie on uszkodzony z powodu sposobu, w jaki radzi sobie z danymi.

Uwaga: kodowanie base64 NIE jest sposobem szyfrowania ani kompaktowania danych. W rzeczywistości fragment danych zakodowany algorytmem base64 jest 1,333… razy większy niż oryginalny zestaw danych. To tylko sposób na upewnienie się, że żadne dane nie zostaną utracone lub zmodyfikowane podczas przesyłania.

giorgio
źródło
5
Dane zakodowane w standardzie Base64 są dokładnie 1,333 (3) razy większe niż dane oryginalne + dodatkowe 0-3 dodatkowe znaki w zależności od długości danych wejściowych modulo 4. Dzieje się tak, ponieważ każdy znak zakodowany w base64 przechowuje informacje o wartości 6 bitów (64 różne znaki) .
również
2
dane przed i po nadal są binarne. to dlaczego dane są
tracone
12

Base64 to mechanizm umożliwiający reprezentowanie i przesyłanie danych binarnych na nośnikach, które pozwalają tylko na drukowane znaki. Jest to najpopularniejsza forma „kodowania podstawowego”, inne znane w użyciu to Base16 i Base32.

Potrzeba Base64 wynikała z potrzeby dołączania treści binarnych do wiadomości e-mail, takich jak obrazy, filmy lub dowolna zawartość binarna. Ponieważ SMTP [RFC 5321] dopuszczał tylko 7-bitowe znaki US-ASCII w wiadomościach, istniała potrzeba reprezentowania tych binarnych strumieni oktetów za pomocą siedmiobitowych znaków ASCII ...

Mam nadzieję, że to odpowiada na pytanie

Ahmed Shah
źródło
3

Base64 to mniej lub bardziej kompaktowy sposób przesyłania (w rzeczywistości kodowania, ale w celu przesyłania) dowolnego rodzaju danych binarnych.

Zobacz http://en.wikipedia.org/wiki/Base64

„Ogólną zasadą jest wybranie zestawu 64 znaków, który jest zarówno częścią podzbioru wspólnego dla większości kodowań, jak i drukowalnym”.

To bardzo ogólny cel, a częstą potrzebą jest nie marnowanie więcej miejsca niż potrzeba.

Historycznie opiera się na fakcie, że istnieje wspólny podzbiór (prawie) wszystkich kodowań używanych do przechowywania znaków w bajtach i że wiele z 2 ^ 8 możliwych bajtów wiąże się z ryzykiem utraty lub przekształcenia podczas prostego przesyłania danych (na przykład kopia- wklej-e-mail-wyślij-e-mail otrzymaj-kopiuj-wklej sekwencja).

(przekieruj głos „za” na komentarz Briana, po prostu dopełniam go i mam nadzieję, że jest on bardziej przejrzysty).

Denys Séguret
źródło
Nie, jest dopiero wcześnie i nie miałem ochoty wymyślać pełnej odpowiedzi. To jest dobre.
Brian Roach