Подтвердить что ты не робот

Преобразование из массива байтов в base64 и обратно

Я пытаюсь:

  • Генерировать массив байтов.
  • Преобразовать этот массив байтов в base64
  • Преобразуйте эту строку base64 в массив байтов.

Я опробовал несколько решений, например, в этом question.

По какой-то причине начальный и последний байтовые массивы не совпадают. Вот код:

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);
    }

Мои вопросы:

  • Почему "originalArray" и "temp_backToBytes" не совпадают? (originalArray имеет длину 32, temp_backToBytes имеет длину 44, но их значения также различны)

  • Можно ли конвертировать туда и обратно, и если да, то как это сделать?

4b9b3361

Ответ 1

Причина, по которой кодированный массив длиннее примерно на четверть, заключается в том, что кодировка base-64 использует только шесть бит из каждого байта; это его причина существования - кодировать произвольные данные, возможно с нулями и другими непечатаемыми символами, таким образом, который подходит для обмена через ASCII-каналы, такие как электронная почта.

Как вы возвращаете свой исходный массив, используйте Convert.FromBase64String:

 byte[] temp_backToBytes = Convert.FromBase64String(temp_inBase64);