Преобразование из массива байтов в 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, но их значения также различны)
-
Можно ли конвертировать туда и обратно, и если да, то как это сделать?
Ответы
Ответ 1
Причина, по которой кодированный массив длиннее примерно на четверть, заключается в том, что кодировка base-64 использует только шесть бит из каждого байта; это его причина существования - кодировать произвольные данные, возможно с нулями и другими непечатаемыми символами, таким образом, который подходит для обмена через ASCII-каналы, такие как электронная почта.
Как вы возвращаете свой исходный массив, используйте Convert.FromBase64String
:
byte[] temp_backToBytes = Convert.FromBase64String(temp_inBase64);