HelloWorld==
содержит информацию, которая не может быть декодирована, и технически недействительна для Base64, поскольку в общем случае они должны быть 0
дополнены. Дополнительные 1
будут проигнорированы и потеряны, когда вы echo "HelloWorld==" | base64 -d
.
Объяснить...
Base64 Работает с группами из 4 символов. Каждый символ представляет 6 бит, поэтому каждая группа из 4 декодируется в 3 байта (8 бит на байт ). Единственным исключением являются последние 4 символа, которые будут варьироваться в зависимости от количества знаков =
. Строки Base64 всегда будут делиться на 4.
В вашем примере Hell
и oWor
действительны.Но ld==
нет. Чтобы понять, почему см. эту справочную таблицу:https://en.wikipedia.org/wiki/Base64
ld==
должен декодироваться только в один байт, потому что в конце у него два =
. Но ld
декодируется в :100101 011101
. В байте всего восемь 8 бит. Поэтому, когда вы декодируете свою строку с помощью base64 -d
, только 100101 01
будет преобразован в байт, а конец 1101
будет полностью проигнорирован.
Любая строка с основанием 64, оканчивающаяся на ==
, должна использовать только первые два бита последнего символа. То есть единственными допустимыми окончаниями с ==
являютсяQ==
A==
w==
g==