Do czego służy kodowanie base 64?

Słyszałem ludzi mówiących o" kodowaniu bazy 64 " tu i ówdzie. W jakim celu się go stosuje?

Author: Slothworks, 2008-10-14

16 answers

Gdy masz jakieś dane binarne, które chcesz przesłać przez sieć, zazwyczaj nie robisz tego, po prostu strumieniując bity i bajty przez przewód w formacie raw. Dlaczego? ponieważ niektóre media są przeznaczone do przesyłania strumieniowego tekstu. Nigdy nie wiadomo - niektóre protokoły mogą interpretować Twoje dane binarne jako znaki sterujące (jak modem) lub dane binarne mogą zostać spieprzone, ponieważ protokół bazowy może myśleć, że wprowadziłeś specjalną kombinację znaków (np. jak FTP tłumaczy linię zakończenia).

Aby to obejść, ludzie kodują dane binarne w znaki. Base64 jest jednym z tych typów kodowania.

Dlaczego 64?
Ponieważ ogólnie można polegać na tym samym 64 znaki są obecne w wielu zestawach znaków, i można mieć pewność, że Twoje dane zostaną ostatecznie na drugiej stronie przewodu bez uszkodzeń.

 746
Author: Dave Markle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-21 04:38:34

Jest to w zasadzie sposób kodowania dowolnych danych binarnych w tekście ASCII. Zajmuje to 4 znaki na 3 bajty danych, Plus potencjalnie trochę wypełnienia na końcu.

Zasadniczo każde 6 bitów wejścia jest zakodowane w 64-znakowym alfabecie. Alfabet" standardowy " używa znaków a-z, a-z, 0-9 oraz + I /, Z = jako znak dopełniający. Istnieją warianty bezpieczne dla URL.

Wikipedia jest dość dobrym źródłem więcej informacji.

 175
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-19 17:27:58

Kodowanie Base-64 jest sposobem na pobranie danych binarnych i przekształcenie ich w tekst, dzięki czemu łatwiej jest je przesyłać w postaci danych e - mail i HTML.

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

 103
Author: Brad Wilson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-14 14:52:20

Jest to kodowanie tekstowe danych binarnych, gdzie wynikowy tekst zawiera tylko litery, cyfry i symbole "+", "/" i "=". Jest to wygodny sposób przechowywania / przesyłania danych binarnych na nośnikach, które są specjalnie używane do danych tekstowych.

Ale dlaczego Base-64? Dwie alternatywy dla konwersji danych binarnych na tekst, które natychmiast przychodzą na myśl, to:

  1. Decimal: zapisuje wartość dziesiętną każdego bajtu jako trzy liczby: 045 112 101 037 itd. gdzie każdy bajt jest reprezentowany przez 3 bajty. Dane są trzy razy większe.
  2. szesnastkowy: zapisuje bajty jako pary szesnastkowe: AC 47 0D 1A itd. gdzie każdy bajt jest reprezentowany przez 2 bajty. Dane są dwukrotnie większe.

Base-64 mapuje 3 bajty (8 x 3 = 24 bity) w 4 znakach obejmujących 6-bitów (6 x 4 = 24 bity). Wynik wygląda jak " TWFuIGlzIGRpc3Rpb...". Dlatego wzdęcia są zaledwie 4/3 = 1,3333333 razy oryginalne.

 98
Author: Ates Goral,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-14 15:02:57

Oprócz tego, co już zostało powiedziane, dwa bardzo powszechne zastosowania, które nie zostały wymienione, to

Hashes:

Hasze są funkcjami jednokierunkowymi, które przekształcają blok bajtów w inny blok bajtów o stałym rozmiarze, taki jak 128bit lub 256bit (SHA/MD5). Konwersja wynikowych bajtów na Base64 znacznie ułatwia wyświetlanie skrótu, zwłaszcza gdy porównujesz sumę kontrolną pod kątem integralności. Hashe są tak często widoczne w Base64, że wiele osób pomyliło Base64 jako hash.

Kryptografia:

Ponieważ kluczem szyfrującym nie musi być tekst, ale surowe bajty, czasami konieczne jest przechowywanie go w pliku lub bazie danych, do której przydaje się Base64. To samo dotyczy zaszyfrowanych bajtów.

Zauważ, że chociaż Base64 jest często używany w kryptografii, nie jest mechanizmem bezpieczeństwa. Każdy może przekonwertować ciąg Base64 z powrotem do jego oryginalnych bajtów, więc nie powinien być używany jako środek do ochrony danych, tylko jako format do wyświetlenia lub łatwiej przechowywać surowe bajty.

Certyfikaty

Certyfikaty X509 w formacie PEM są zakodowane w bazie 64. http://how2ssl.com/articles/working_with_pem_files/

 64
Author: Despertar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-23 20:08:35

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

Termin Base64 odnosi się do określonego kodowania przesyłania treści MIME. Jest również używany jako termin ogólny dla każdego podobnego schematu kodowania, który koduje dane binarne, traktując je numerycznie i przekładając na reprezentacja w bazie 64. Szczególny wybór bazy wynika z historia kodowania zestawu znaków: można wybrać zestaw 64 znaków, które są częścią podzbioru wspólnego dla większości kodowanie, a także do druku. Ta kombinacja sprawia, że dane nie będą modyfikowane w tranzycie przez systemy, takie jak poczta elektroniczna, które były tradycyjnie nie 8-bitowe czyste.

Base64 może być używany w różnych kontekstach:

    Evolution i Thunderbird używają Base64 do zaciemniania haseł e-mail[1]
  • Base64 może być używany do przesyłania i przechowywania tekstu, który w przeciwnym razie mógłby spowodować kolizję ograniczników
  • Base64 jest często używany jako szybki, ale niepewny skrót do ukrywania tajemnic bez ponoszenia kosztów kryptograficznego zarządzania kluczami

  • Spamerzy używają Base64 do unikania podstawowych narzędzi antyspamowych, które często nie dekodują Base64 i dlatego nie mogą wykryć słów kluczowych w zakodowanych wiadomości.

  • Base64 służy do kodowania łańcuchów znaków w plikach LDIF
  • Base64 jest czasami używany do osadzania danych binarnych w pliku XML, używając składni podobnej do ...... np. Zakładki Firefoksa.html.
  • Base64 jest również używany podczas komunikacji z rządowymi urządzeniami do drukowania podpisów fiskalnych (zwykle przez porty szeregowe lub równoległe) do zminimalizuj opóźnienie podczas przesyłania znaków paragonu do podpisania.
  • Base64 jest używany do kodowania plików binarnych, takich jak obrazy w skryptach, aby uniknąć zależności od plików zewnętrznych.
  • może być używany do osadzania surowych danych obrazu we właściwościach CSS, takich jak background-image.
 22
Author: warren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-29 06:02:43

We wczesnych czasach komputerów, kiedy komunikacja między systemami linii telefonicznych nie była szczególnie niezawodna, stosowano szybką i brudną metodę weryfikacji integralności danych: "parytet bitów". W tej metodzie każdy transmitowany bajt będzie miał 7 bitów danych, a ósmy będzie wynosił 1 lub 0, aby wymusić całkowitą liczbę 1 bitów w bajcie, aby była parzysta.

Stąd 0x01 będzie transmitowane jako 0x81; 0x02 będzie 0x82; 0x03 pozostanie 0x03 itd.

Aby dalej ten system, gdy Zdefiniowano zestaw znaków ASCII, tylko 00-7F były przypisane znaki. (Do dziś wszystkie znaki ustawione w zakresie 80-FF są niestandardowe)

Wiele routerów tego dnia stosuje sprawdzanie parzystości i tłumaczenie bajtów na sprzęt, zmuszając podłączone do nich komputery do radzenia sobie ściśle z 7-bitowymi danymi. Wymusza to konwersję załączników e-mail (i wszystkich innych danych, dlatego protokoły HTTP i SMTP są oparte na tekście) do formatu tylko tekstowego.

Kilka routerów przetrwało do W latach 90.

 19
Author: James Curran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-14 15:09:11

Niektóre protokoły transportowe umożliwiają przesyłanie tylko znaków alfanumerycznych. Wystarczy wyobrazić sobie sytuację, w której znaki sterujące są używane do wyzwalania akcji specjalnych i / lub które obsługują tylko ograniczoną szerokość bitów na znak. Base64 przekształca dowolne wejście w kodowanie, które używa tylko znaków alfanumerycznych, +, / i = jako znak dopełniający.

 9
Author: Konrad Rudolph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-14 14:53:32

Użycie Base64 zamierzam opisać tutaj jest nieco hack. Więc jeśli nie lubisz hacków, proszę, nie idź dalej.

Wpadłem w kłopoty, kiedy odkryłem, że UTF8 MySQL nie obsługuje 4-bajtowych znaków unicode, ponieważ używa 3-bajtowej wersji utf8. Co zrobiłem, aby obsługiwać pełny 4-bajtowy unicode przez UTF8 MySQL? Cóż, base64 koduje ciągi podczas przechowywania w bazie danych i base64 dekoduje podczas pobierania.

Ponieważ kodowanie i dekodowanie base64 jest bardzo szybkie, powyżej działało idealnie.

Należy zwrócić uwagę na następujące punkty:

  • Kodowanie Base64 wykorzystuje o 33% więcej pamięci

  • Ciągi przechowywane w bazie danych nie będą czytelne dla człowieka (można to sprzedać jako cechę, że ciągi bazy danych używają podstawowej formy szyfrowania).

Możesz użyć powyższej metody dla każdego silnika pamięci, który nie obsługuje unicode.

 7
Author: Basil Musa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-06 22:45:14

Służy do konwersji dowolnych danych binarnych na tekst ASCII.

Na przykład załączniki e-mail są wysyłane w ten sposób.

 6
Author: Can Berk Güder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-14 14:53:12

Używam go w sensie praktycznym, gdy przenosimy duże obiekty binarne (obrazy) za pośrednictwem usług internetowych. Więc kiedy testuję usługę C# web przy użyciu skryptu Pythona, obiekt binarny może być odtworzony z odrobiną magii.

[w Pythonie]

import base64
imageAsBytes = base64.b64decode( dataFromWS )
 6
Author: Andrew Cox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-15 17:26:41

Głównie widziałem, jak kodował dane binarne w kontekstach, które obsługują tylko ascii - lub proste-zestawy znaków.

 4
Author: Eric Tuttleman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-14 14:52:44

Aby nieco rozszerzyć to, co mówi Brad: wiele mechanizmów transportu dla poczty e-mail i Usenetu oraz innych sposobów przenoszenia danych nie jest "czystych 8 bitów", co oznacza, że znaki spoza standardowego zestawu znaków ascii mogą być zniekształcone podczas transportu - na przykład, 0x0D może być postrzegane jako powrót karetki i zamieniane w powrót karetki i kanał linii. Base 64 mapuje wszystkie znaki binarne na kilka standardowych liter i cyfr ascii oraz interpunkcji, więc nie będą one zniekształcone w ten sposób.

 3
Author: Paul Tomblin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-14 14:54:40

" Schematy kodowania Base64 są powszechnie używane, gdy istnieje potrzeba kodowania danych binarnych, które muszą być przechowywane i przesyłane przez media, które są zaprojektowane do radzenia sobie z danymi tekstowymi. Ma to na celu zapewnienie, że dane pozostaną nienaruszone bez modyfikacji podczas transportu " (Wiki, 2017)

Przykład może być następujący: masz usługę internetową, która akceptuje tylko znaki ASCII. Chcesz zapisać, a następnie przenieść dane użytkownika do innej lokalizacji (API), ale odbiorca chce otrzymywać nietknięte dane. Base64 jest do tego. . . Jedynym minusem jest to, że kodowanie base64 będzie wymagało około 33% więcej miejsca niż zwykłe ciągi.

Inny przykład:: uenc = URL encoded = ahr0cdovl2xvyy5tywdlbnrvlmnvbs9hc2ljcy1tzw4tcy1nzwwta2f5yw5vlxhpas5odg1s = http://loc.querytip.com/asics-men-s-gel-kayano-xii.html .

Jak widać nie możemy umieścić znaku " / " w URL, jeśli chcemy wysłać ostatnio odwiedzany URL jako parametr, ponieważ złamalibyśmy regułę atrybutu / wartości dla "mod rewrite – - GET parametr.

Pełny przykład to:"http://loc.querytip.com/checkout/cart/add/uenc/http://loc.magento.com/asics-men-s-gel-kayano-xii.html/product/93/"

 3
Author: jmr333,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-21 10:55:02

Base64

Base64 jest ogólnym terminem dla wielu podobnych schematów kodowania, które kodują dane binarne, traktując je numerycznie i tłumacząc je na reprezentację bazy 64. Termin Base64 pochodzi od określonego kodowania przesyłania zawartości MIME.

Schematy kodowania Base64 są powszechnie używane, gdy istnieje potrzeba kodowania danych binarnych, które muszą być przechowywane i przesyłane przez media, które są zaprojektowane do radzenia sobie z danymi tekstowymi. Ma to na celu zapewnienie, że dane pozostają nienaruszone bez modyfikacji podczas transportu. Base64 jest powszechnie używany w wielu aplikacjach, w tym e-mail przez MIME, i przechowywania złożonych danych w XML.

 2
Author: mugil k,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-10 06:58:34

Base64 może być używany do wielu celów.

Głównym powodem jest konwersja danych binarnych na coś przejezdnego.

Czasami używam go do przekazywania danych JSON z jednej strony do drugiej, przechowywania informacji w plikach cookie o użytkowniku.

Uwaga: "Możesz" użyć go do szyfrowania - nie rozumiem, dlaczego ludzie mówią, że nie możesz, i że to nie jest szyfrowanie, chociaż byłoby łatwo złamać i jest źle postrzegane. Szyfrowanie to nic innego jak konwersja jednego ciągu danych na kolejny ciąg danych, który można później odszyfrować lub nie, i to właśnie robi base64.

 0
Author: Jody Fitzpatrick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-23 15:46:00