#base64 #tobase64string
#base64 #tobase64string
Вопрос:
https://docs.microsoft.com/en-us/dotnet/api/system.convert.tobase64string?view=net-5.0
В нем говорится
Если целое число 3-байтовых групп не существует, оставшиеся байты эффективно дополняются нулями, чтобы сформировать полную группу. В этом примере значение последнего байта равно шестнадцатеричному FF . Первые 6 бит равны десятичной системе счисления 63, что соответствует базовой 64-разрядной цифре «/» в конце вывода, а следующие 2 бита дополняются нулями, чтобы получить десятичную систему счисления 48, что соответствует базовой 64-разрядной цифре «w». Последние два 6-битных значения являются дополнением и соответствуют символу заполнения без значения «=».
Теперь,
Представьте, что массив байтов, который я отправляю, равен
0
Итак, только один байт, а именно 0
Этот один байт будет добавлен прямо в 000, верно?
Итак, теперь у нас будет что-то вроде 0 === в качестве кодировки, потому что для кодирования 3 байтов в кодировке base 64 требуется 4 символа.
Теперь мы это расшифруем.
Откуда мы знаем, что исходный байт не 00 или 000, а просто 0?
Должно быть, я что-то здесь упускаю.
Комментарии:
1. Я не совсем уверен, так что это не ответ, но я думаю, что вы в основном находитесь в одном примере M здесь . Начиная с первого байта 0, base64 сгенерирует два символа A. Чтобы заполнить оставшиеся биты второго A, будет добавлено 4 нуля. Тогда два оставшихся блока пусты. При декодировании он может утверждать, что последний блок A является неполным благодаря заполнению =, и из «AA» он может восстановить один байт 0.
2. О, я понимаю. Итак, 0-> AA== 00-> AAA= и 000 будут AAAA
Ответ №1:
Итак, теперь у нас будет что-то вроде 0 === в качестве кодировки
3 символа заполнения недопустимы. Это будет означать 6 бит плюс дополнение.
И тогда 0 в качестве байтового значения находится A
в Base64, так и было бы AA==
.
Итак, первый A содержит первые 6 бит байта 0, второй A вносит 2 оставшихся бита 0 для вашего байта, а затем остается всего 4 бита 0 плюс дополнение, чего недостаточно для второго байта.
Откуда мы знаем, что исходный байт не 00 или 000, а просто 0?
AA==
имеет только 12 бит (6 бит на символ), поэтому он может кодировать только 1 байт => 0
AAA=
имеет 18 бит, достаточно для 2 байт => 00
AAAA
имеет 24 бита = 3 байта => 000