Jaki jest cel kodowania base 64 i dlaczego jest używane w uwierzytelnianiu podstawowym HTTP?

134

Nie rozumiem szyfrowania Base64.

Jeśli można odszyfrować ciąg Base64, jaki jest jego cel?

Dlaczego jest używany do uwierzytelniania HTTP Basic?

To tak, jakby powiedzieć komuś, że moje hasło zostało zamienione na OLLEH.

Osoby, które zobaczą OLLEH, będą wiedzieć, że oryginalne hasło to HELLO.

ajsie
źródło
11
base64 nie jest szyfrowaniem, to kodowanie
n611x007

Odpowiedzi:

254

Base64 to nie szyfrowanie - to kodowanie. Jest to sposób przedstawiania danych binarnych przy użyciu wyłącznie znaków drukowalnych (tekstowych).

Zobacz ten akapit ze strony Wikipedii dla podstawowego uwierzytelniania HTTP :

Chociaż kodowanie nazwy użytkownika i hasła za pomocą algorytmu Base64 zazwyczaj sprawia, że ​​są one nieczytelne gołym okiem, są one równie łatwe do odkodowania, jak zakodowania. Bezpieczeństwo nie jest celem kroku kodowania. Celem kodowania jest raczej zakodowanie znaków niezgodnych z protokołem HTTP, które mogą znajdować się w nazwie użytkownika lub haśle, na znaki zgodne z protokołem HTTP.

Matt Bridges
źródło
4
Wydaje się również, że odpowiednie kodowanie znaków, aby uzyskać „dane binarne” z łańcucha, powinno być zgodne z iso-8859-1 . ( źródło )
Myobis
61

Zwykle nazywa się to kodowaniem base64, a nie szyfrowaniem! Zaletą kodowania base64 jest to, że umożliwia reprezentowanie danych (binarnych) przy użyciu tylko ograniczonego, wspólnego podzbioru dostępnych znaków, znacznie wydajniej niż zwykłe pisanie ciągu jedynek i zer, na przykład jako ASCII.

Flexo
źródło
6
+1, ale w porównaniu do przechowywania danych w strumieniu 1s, 0s jest zbyt przesadzone. Lepiej porównać to do przechowywania danych w formacie szesnastkowym. Ponieważ szesnastkowy dałby tylko x2więcej bajtów niż oryginalny strumień, a 1s, 0s - tworzy x8razy więcej bajtów. (A Base64 tworzy x1.3więcej danych niż oryginalna tablica bajtów). Dlatego czasami dopuszczalne jest zakodowanie strumienia binarnego jako ciągu szesnastkowego, podwojenie ilości bajtów - na przykład po prostu do przechowywania skrótu hasła w bazie danych.
Agnius Vasiliauskas
30

Pl krypta jonowa wymaga klucza (lub ciąg algorytm) w celu odszyfrowania; stąd „krypta” (root: kryptografia )

Pl COD ing modyfikuje / zmiany / zmienia kod znaku do drugiego. W takim przypadku zwykłe bajty danych można teraz łatwo przedstawić i przetransportować za pomocą protokołu HTTP.

vol7ron
źródło
5
Szyfrowanie oznacza po prostu „ukryć” - kryptografia oparta na kluczach jest bardzo nowym wynalazkiem. Szyfrowanie jest formą kodowania używaną jako szyfrowanie (choć od setek lat nie ma go ktoś powyżej 12 lat).
2
Szyfrowanie w języku potocznym jest używane w odniesieniu do najnowszych trybów szyfrowania, w szczególności szyfrowania komputera, które jest oparte na kluczu (klucz publiczny / prywatny). Chociaż jest to prawda, nie jest konieczne wskazywanie na dosłowną definicję słowa przestarzałego; w przeciwnym razie spierałbyś się o historyczną definicję wielu dzisiejszych angielskich słów. Język ojczysty (a czasem potoczny) nadaje słowom kontekst, a tym samym definicję.
vol7ron
1
Nie sądzę, żebyś brzmiał niegrzecznie; Zgadzam się z twoim stanowiskiem dotyczącym współczesnego kontekstu. Słowa i definicje nieustannie ewoluują. Myślę, że „kodowanie” i „szyfrowanie” z pewnością mają dwie bardzo różne definicje we współczesnym przetwarzaniu komputerowym, a Twoja odpowiedź wymaga podsumowania różnic.
Dan Bechard
Kodowanie Base64 jest formą zaciemniania, co po prostu oznacza uczynienie niejasnym. W przypadku wielu aplikacji jest to wystarczające szyfrowanie, na przykład gdy celem jest po prostu modyfikowanie dowolnego czystego tekstu przesłanego przewodem.
Dominic Cerisano
6
@DominicCerisano: Nie, kodowanie base64 nie liczy się jako szyfrowanie i mam nadzieję, że nie używasz go do ochrony czegokolwiek.
Ry-
19

W języku potocznym „kod” jest tajemnicą. W nauce i inżynierii kod jest po prostu zgodą, zbiorem reguł, jak coś napisać.

Ten kod może być tajny. W takim przypadku nazywa się to szyfrowaniem. Ale ogólnie kod nie jest tajny. Weź kod genetyczny. To po prostu stwierdza, że nasze DNA jest zbudowany z czterech różnych bazach -  A, C, Gi T, a trzy bazy wzięte razem tworzą jeden aminokwas. Jest też tabela, w której trzy litery tworzą określony aminokwas.

W tym kodzie nie ma nic tajemniczego.

Podobnie Base64 nie jest tajnym kodem. Jest to raczej kod, który pozwala na przechowywanie danych w sześciu bitach na znak (w ten sposób istnieje 64 różnych jednostek, tj. „Baza” systemu to 64, tak jak podstawa naszego systemu dziesiętnego to 10, ponieważ istnieje 10 różnych jednostek zwane „cyframi”).

Konrad Rudolph
źródło
17

Kodowanie Base-64 jest częścią specyfikacji MIME. Zapewnia bezpieczne w transporcie kodowanie danych, które nie zostaną przeżute, jeśli / kiedy zostaną przekazane przez hosta używającego innego schematu kodowania niż ten używany przez oryginalnego klienta.

Na intertubach jest wiele różnych hostów i tak naprawdę nie można zakładać obsługi niczego innego niż 7-bitowy ASCII, bez ryzyka utraty danych / pomyłki.

Na przykład komputery mainframe IBM używają kodowania o nazwie EBCDIC (które jest dostępne w wielu różnych wersjach). Jego punkty kodowe są zupełnie inne niż punkty kodowe używane przez putery oparte na ASCII - w ASCII litery AZ to 0x41 - 0x5A; w EBCDIC litery A - Z nie są nawet ciągłym zakresem: litery AI znajdują się w 0xC1 - 0xC9, litery JR znajdują się w 0xD1 - 0xD9, a litery SZ w 0xE2 - 0xE9.

Nicholas Carey
źródło
1

Domyślnie parametry pola nagłówka komunikatu w komunikatach protokołu HTTP (Hypertext Transfer Protocol) nie mogą przenosić znaków spoza zestawu znaków ISO-8859-1.

Jeśli nazwa użytkownika i hasło zawierają niezgodny zestaw znaków, wówczas protokół HTTP nie będzie w stanie przenieść tego tekstu. aby temu zapobiec, kodujemy nazwę użytkownika i hasło za pomocą base64, aby upewnić się, że wysyłamy znak zgodny z HTTP przez HTTP. Aby uzyskać więcej informacji, zobacz to Basic_access_authentication

Varun
źródło