Wiem, co to base64
jest kodowanie i jak obliczyć base64
kodowanie w C #, jednak kilkakrotnie widziałem, że kiedy przekonwertuję ciąg na base64, jest =
na końcu.
Pojawiło się kilka pytań:
- Czy
base64
ciąg zawsze kończy się na=
? - Dlaczego
=
dodaje się na końcu?
Odpowiedzi:
Służy jako wyściółka .
Bardziej kompletną odpowiedzią jest to, że łańcuch zakodowany w base64 nie zawsze kończy się na a
=
, kończy się tylko na jednym lub dwóch,=
jeśli są one wymagane do uzupełnienia łańcucha na odpowiednią długość.źródło
=
wystarczy zsynchronizować jeden singiel . Jeśli chcesz znaleźć granice, to zawsze powinien być obecny terminator (i wciąż potrzebny jest tylko jeden znak). Cała koncepcja wypełniania Base64 to tylko mózg ...base64
efektywne wypełnianie za pomocą ilustracji i przykładów. Obecny link do wikipedii jest absolutnie nieistotny jak @NH. wzmiankowany.1-nr
2- Jako krótka odpowiedź: 65. znak (znak „=”) jest używany tylko jako uzupełnienie w końcowym procesie kodowania wiadomości.
Nie będziesz miał znaku „=”, jeśli ciąg ma wielokrotność liczby 3 znaków, ponieważ
Base64
kodowanie zajmuje każde trzy bajty (8 bitów) i reprezentuje je jako cztery znaki do wydrukowania w standardzie ASCII.Detale :
(a) Jeśli chcesz zakodować
ABCDEFG <=> [
ABC
] [DEF
] [G
Base64
poradzi sobie (wytwarzając 4 znaki) z pierwszym blokiem i drugim (gdy są kompletne), ale w przypadku trzeciego doda podwójny==
wynik w celu uzupełnienia 4 potrzebnych znaków. Zatem wynik będzie QUJD REVG Rw == (bez spacji)(b) Jeśli chcesz zakodować ...
ABCDEFGH <=> [
ABC
] [DEF
] [GH
Podobnie doda tylko jeden
=
koniec na wyjściu, aby uzyskać 4 znaki, wynikiem będzie QUJD REVG R0g = (bez spacji)źródło
Z Wikipedii :
Jest to więc rodzaj wypełnienia.
źródło
źródło
=
pod koniec i przetestowałem to dla 1 miliona ciągów. Dekodowanie zawsze pasowało.Jest zdefiniowany w RFC 2045 jako specjalny znak wypełniający, jeśli na końcu zakodowanych danych dostępnych jest mniej niż 24 bity.
źródło
Znak równości (=) jest używany jako dopełnienie w niektórych formach kodowania base64. Artykuł w Wikipedii na temat base64 zawiera wszystkie szczegóły.
źródło
Padding Od http://en.wikipedia.org/wiki/Base64 :
źródło
decode(encode(A)+encode(B))=A+B
działa z wypełnieniem, ale nie bez.http://www.hcidata.info/base64.htm
Kodowanie „Mary miała” na podstawie 64
W tym przykładzie używamy prostego ciągu tekstowego („Mary miała”), ale zasada obowiązuje bez względu na dane (np. Plik graficzny). Aby przekonwertować każde 24 bity danych wejściowych na 32 bity wyjściowe, kodowanie Base 64 dzieli 24 bity na 4 porcje po 6 bitów. Pierwszym problemem, jaki zauważamy, jest to, że „Mary miała” nie jest wielokrotnością 3 bajtów - ma długość 8 bajtów. Z tego powodu ostatnia grupa bitów ma tylko 4 bity. Aby temu zaradzić, dodajemy dwa dodatkowe bity „0” i zapamiętujemy ten fakt, umieszczając na końcu „=”. Jeśli ciąg tekstowy, który ma zostać przekonwertowany na bazę 64, miałby 7 bajtów, ostatnia grupa miałaby 2 bity. W tym przypadku dodalibyśmy cztery dodatkowe bity „0” i pamiętamy ten fakt, umieszczając na końcu „==”.
źródło