Próbuję:Konwersja z tablicy bajtów do base64 i powrót
- Generuje tablicę bajtów.
- Konwertuj tablicę bajtów na base64
- Konwertuj łańcuch base64 z powrotem na tablicę bajtów.
Wypróbowałem kilka rozwiązań, na przykład te w tym question.
Z jakiegoś powodu początkowe i końcowe tablice bajtów nie są zgodne. Oto kod używany:
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
byte[] originalArray = new byte[32];
rng.GetBytes(key);
string temp_inBase64 = Convert.ToBase64String(originalArray);
byte[] temp_backToBytes = Encoding.UTF8.GetBytes(temp_inBase64);
}
moje pytania są następujące:
Dlaczego "originalArray" i "temp_backToBytes" nie pasuje? (originalArray ma długość 32, temp_backToBytes ma długość 44, ale ich wartości również są różne)
Czy można konwertować w tę iz powrotem, a jeśli tak, w jaki sposób mogę to zrobić?
To działało, chociaż jeśli base64 wykorzystuje tylko 6 z każdych 8 bitów, to myślę, że kodowanie będzie krótszy? – crawfish
@crawfish Kodowanie wykorzystuje sześć z ośmiu bitów na wyjściu, pozostawiając dwie najbardziej znaczące wartości zerowe. W rezultacie każda grupa trzech bajtów ('3 * 8 = 24' bitów) staje się grupą czterech bajtów (' 4 * 6 = 24' bitów). Jeśli liczba bajtów w oryginale nie jest podzielna przez trzy, specjalne znaczniki są dodawane na końcu. W twoim przypadku następna liczba podzielna przez 3 większe niż 32 to 33, lub "11 * 3". Oznacza to, że wynikiem jest '11 * 4' lub 44 bajty. – dasblinkenlight
Wielkie dzięki za wyjaśnienie – crawfish