2010-06-22 12 views
23

Czy ciąg zakodowany w base64 może zawierać spacje? Konkretnie, czy może zawierać białe spacje pod numerem końca ciągu znaków?Czy łańcuch zakodowany w base64 może zawierać spacje?

PS. Zastanawiam się nad całością "MySQL będzie wyrównywać spacje ciągłe podczas przechowywania łańcuchów w polach VARCHAR" tutaj ;-)

+0

P'raps Mam na myśli "robi" więcej niż "może" ;-) – Dougal

+0

cóż, możesz dodać białe spacje w zależności od implementacji, ale w większości zostaną one po prostu usunięte, ponieważ są one faktycznie ważne, ponieważ nie są częścią alfabetu b64 " "ale często uwzględniane w celach wyświetlania," readbility "faktycznie nie trafia, ponieważ" normalny "człowiek nie czyta ciągów b64 na pierwszym miejscu – My1

Odpowiedz

19

Nie, nie może. Zobacz Base64 dla dozwolonym repozytorium znaków używanych przez base64, które są znaki A-Z, a-z, 0-9, + i / (dwa ostatnie mogą się różnić w zależności od wykonania), jak również postać wyściółka = (ale to jest również zależna od implementacji, jak niektórzy implementacje w ogóle nie używają dopełnienia).

+4

tak, może, nie należą one do kodu, ale w większości implementacji mogą dodawać zachować readabili ty. Większość dekoderów ignoruje białe znaki. – jigfox

+0

Tak, to prawda, ale nie są one znaczące dla zakodowanego łańcucha, co oznacza, że ​​można je bezpiecznie zignorować i nie ma znaczenia, czy MySQL, czy ktokolwiek je usunie. Intencją PO jest oczywiście przechowywanie łańcuchów 'base64' w kolumnie' VARCHAR' MySQL, która jest absolutnie bezpieczna. –

+3

Pozdrawiam facetów, miałem na myśli więcej "robi" ciąg znaków base64 zawierający spacje - nie "może" - moja wina. Podsumowując, MOŻNA, ale są one nieistotne. :-) Rozumiem teraz – Dougal

1

Wikipedia sugeruje, że jesteśmy niczym wariacji gazillion z kodowaniem Base64:

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

Więc odpowiedź prawdopodobnie zależy od tego, co trzeba zrobić z łańcucha. Ale ja śmiem powiedzieć, że stworzony w PHP z base64_encode(), więc wydaje się być bezpieczny, aby dołączyć półfabrykatów:

<?php 

$original_data = 'Lorem ipsum dolor sit amet'; 
$encoded_data = base64_encode($original_data); 
$padded_data = ' ' . chunk_split($encoded_data, 3, ' ') . ' '; 

echo base64_decode($padded_data); // Prints 'Lorem ipsum dolor sit amet' 

?> 
+0

Okrężny sposób na udowodnienie tego przypuszczam! Dzięki – Dougal

0

O ile wiem, to nie. Zasadniczo łańcuch Base64 musi być skonstruowany ze zbioru 64 znaków. A-Z, a-z, 0-9 tworzą 62 - pozostałe dwa zależą od implementacji.

Na podstawie tego, co wiem, istnieje teraz implementacja, która będzie wykorzystywać białe znaki jako postać. Głównym powodem tego jest czytelność - tzn. Ciąg Base64 musi być łatwo drukowany i rozpoznawany.

Prawdopodobnie znajdziesz więcej informacji na ten temat na Wikipedia.

+0

Przydatne i interesujące. Dzięki – Dougal

3

Tak. Łańcuch zakodowany w Base64 może zawierać białe spacje, ale znaki nie są znaczące. Więc jest ok, jeśli baza danych przycina spacje.

W rzeczywistości oryginalna specyfikacja MIME zaleca łamanie ciągów Base64 w wierszach o długości 72 znaków. base64Binary XML może również zawierać nowe linie, tabulatory, spacje.

W PHP, base64_decode() usuwa wszystkie znaki whiltespace, dzięki czemu nie musisz się tym martwić.

12

Nie powinien, ale może zrobić.

Prawidłowy ciąg base64 nie powinna zawierać spacji, ponieważ alfabet kodowania powinna składać się tylko z AZ az 0-9 +/

Jednakże, jeśli zakodowane dane dzieje zawierać znak „+”, a dane są przekazane w adresie URL, może zostać przypadkowo zamienione na spację. Więc możesz natknąć się na rzekomy ciąg base64, który wydaje się mieć w nim spacje w tych okolicznościach.

Jeśli tak jest, po prostu zamień spację na plusy przed dekodowaniem.

PS.Myślę o tym cały „spacji MySQL wykończenia spływu podczas przechowywania ciągów pól VARCHAR” tu

Tak na marginesie, to odstępy spływu, jako varchar nie zostanie pozbawiony niedbale jak MySQL 5.0.3

+0

Nie powinno to być jednak problemem, jeśli używasz bezpiecznego algorytmu kodowania Base64 :) – Ren

+3

+1 za wspomnienie o problemie "+"/przestrzeni. Właśnie URL podał ciąg Base64 z konwertowanymi na spacje. –

+0

Szałem z tego powodu. Dziękuję Ci! –