2012-04-25 11 views
49

Dlaczego mamy kodowanie Base64? Jestem początkującym i naprawdę nie rozumiem, dlaczego można zaciemnić bajty w coś innego (chyba że jest szyfrowanie). W jednej z książek, które czytałem, kodowanie Base64 jest użyteczne, gdy transmisja binarna nie jest możliwa. Na przykład. Kiedy wysyłamy formularz, jest on kodowany. Ale dlaczego konwertujemy bajty na litery? Czy nie moglibyśmy po prostu konwertować bajtów na format łańcuchowy z odstępem? Na przykład 00000001 00000004? Lub po prostu 0000000100000004 bez spacji, ponieważ bajty zawsze występują w parze 8?Jaki jest prawdziwy cel kodowania Base64?

+8

Ponieważ właśnie zmieniłeś 1 bajt na 8 zamiast 3 na 4, tak jak w przypadku base64 (jeśli pamięć obsługuje mnie poprawnie). Przepustowość jest skończona. –

+0

Jesteś mylącym bitem (z 8 bitami tworzysz bajt) i bajtami, które mogą pochodzić z dowolnego ugrupowania. –

Odpowiedz

60

Base64 to sposób kodowania danych binarnych w zestaw znaków ASCII znany niemal każdemu systemowi komputerowemu, w celu przesyłania danych bez utraty lub modyfikacji samej zawartości. Na przykład systemy pocztowe nie mogą obsługiwać danych binarnych, ponieważ oczekują danych ASCII (tekstowych). Więc jeśli chcesz przesłać obraz lub inny plik, zostanie uszkodzony z powodu sposobu, w jaki przetwarza dane.

Uwaga: kodowanie base64 NIE jest sposobem szyfrowania ani sposobem kompaktowania danych. W rzeczywistości dane zakodowane w Base64 są 1.333 ... razy większe niż oryginalne pliki danych. Jest to tylko sposób upewnienia się, że żadne dane nie zostaną utracone lub zmienione podczas transferu.

+3

Dane zakodowane w Base64 są dokładnie 1.333 (3) razy większe niż oryginalne dane + dodatkowe 0-3 dodatkowe znaki w zależności od długości danych wejściowych modulo 4. Dzieje się tak dlatego, że każdy znak zakodowany w formacie base64 przechowuje informacje o 6 bitach (64 różne znaki). – too

+1

zarówno przed jak i po danych nadal są binarne. to dlaczego dane tracą –

3

Base64 to mniej lub bardziej kompaktowy sposób nadawania (kodowania, w rzeczywistości, ale z celem nadawania) wszelkiego rodzaju danych binarnych.

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

„Ogólną zasadą jest, aby wybrać zestaw 64 znaków, który jest jednocześnie częścią podzbioru wspólne dla większości kodowania, a także do druku.”

Jest to bardzo ogólny cel, a powszechną potrzebą nie jest 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 oraz że wiele z 2^8 możliwych bajtów utraty lub transformacji ryzyka podczas prostego transferu danych (dla przykładowa sekwencja copy-paste-emailsend-emailreceive-copy-paste).

(proszę przekieruj przegłos na komentarz Briana, po prostu poprawię go i mam nadzieję, że będzie bardziej przejrzysty).

+0

Nie, jest po prostu wcześnie i nie miałem ochoty uzupełnić kompletnej odpowiedzi. To jest dobre. –

+0

Zobacz, mogę się zepsuć używając Base64 do kopiowania/wklejania danych binarnych jako tekstu bez martwienia się o niedrukowalne znaki (takie jak URL danych do przechowywania, powiedzmy, danych obrazu, w ciągu znaków). Nie rozumiem tego, kiedy ludzie używają go do kodowania zwykłego tekstu. Podobnie jak sposób * Hyper Light Drifter * zapisuje swoje dane zapisu w łańcuchu JSON, a następnie koduje go do Base64.Jest to niepotrzebny dodatkowy krok w zapisywaniu/wczytywaniu, który nie przynosi niczego pożytecznego i zajmuje więcej czasu i miejsca. Gdyby nie można było ich pieprzyć, by napisali swój własny system zapisu, o ile jeszcze w grze zostało pomalowane? –

3

Base64 to mechanizm umożliwiający reprezentowanie i przesyłanie danych binarnych na nośnikach, które pozwalają na drukowanie znaków. Jest to najbardziej popularna forma "Base Encoding", inne znane w użyciu to Base16 i Base32.

Potrzeba Base64 powstał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] dozwolone tylko 7-bitowych znaków US-ASCII w zasięgu komunikatów, nie było potrzeba do reprezentowania tych binarnych strumieni oktetów stosując siedem bitowych znaków ASCII ...

Nadzieja ta odpowiada na pytanie