2013-03-04 14 views
12

Jedna z moich uczelni informowała mnie, że pusty ciąg nie jest prawidłowym zakodowanym łańcuchem danych w formacie base64. Nie sądzę, że to prawda (jest zbyt leniwy, aby go przetworzyć), ale po trochę googlowaniu, a nawet sprawdzeniu RFC, nie znalazłem żadnej dokumentacji, która jawnie stwierdzi,, jak prawidłowo zakodować blob o zerowej długości bajtów w base64.Czy pusty ciąg znaków zawiera zakodowane dane w formacie base64 o zerowej długości bajtów?

Pytanie brzmi: Czy masz link do oficjalnej dokumentacji, która wyraźnie określa, w jaki sposób bajt zerowy powinien być zakodowany w base64?

Odpowiedz

5

Moja myśl na ten temat jest taka, że ​​istnieją dwie możliwe wartości base64, które może wytworzyć pusty łańcuch; pusty łańcuch lub ciąg składający się wyłącznie ze znaków pad ("==="). Każdy inny prawidłowy ciąg base64 zawiera informacje. Z tym drugim przypadku możemy zastosować następującą regułę z RFC:

Jeśli więcej niż dozwolona liczba znaków podkładki znajdują się na końcu łańcucha, np bazę 64 znaków zakończonego „= == ", nadmiarowe znaki padów mogą zostać zignorowane.

ponieważ mogą być ignorowane, mogą zostać usunięte z powstałego zakodowany ciąg bez konsekwencji, po raz kolejny zostawiając nas z pustym ciągiem jako reprezentacji base64 pustego łańcucha.

+1

Podoba mi się twoje podejście, zamiast mieć pusty ciąg znaków mógłbym mieć równe znaki. BTW Myślę, że powinno to być cztery lub jeden. Dane zakodowane w Base64 powinny mieć długość podzielną przez cztery. Ale cechą, na której polegasz, jest nadmiar znaków, które należy zignorować, więc mógłbym powiedzieć "=". – Fozi

+0

Próbowałem użyć metody .net Convert.FromBase64String ("==="), ale nie udało się z wyjątkiem. Używanie string.Empty działa i zwraca pusty bajt []. – teamalpha5441

Powiązane problemy