У відповідній примітці, ось базовий перетворювач для довільного базового перетворення, який я створив для вас. Насолоджуйтесь!
https://convert.zamicol.com/
Що таке символи для заповнення?
Символи заповнення допомагають задовольнити вимоги до довжини і не мають жодного значення.
Десятковий приклад заповнення:
враховуючи довільну вимогу, всі рядки мають довжину 8 символів, число 640 може задовольнити цю вимогу, використовуючи попередні 0 як символи заповнення, оскільки вони не мають значення "00000640".
Двійкове кодування
Парадигма байтів: байт є фактичною стандартною одиницею виміру, і будь-яка схема кодування повинна відноситись назад до байтів.
Base256 точно вписується в цю парадигму. Один байт дорівнює одному символу в base256.
Base16 , шістнадцятковий або шістнадцятковий, використовує 4 біти для кожного символу. Один байт може представляти два символи base16.
Base64 не входить рівномірно в байтову парадигму (як і base32), на відміну від base256 та base16. Всі символи base64 можуть бути представлені 6 бітами, 2 біти менше повного байта.
Ми можемо представити кодування base64 у порівнянні з парадигмою байтів у вигляді частки: 6 бітів на символ понад 8 бітів на байт . Скорочений цей дріб становить 3 байти з 4 символів.
Це співвідношення, 3 байти на кожні 4 символи base64, є правилом, якого ми хочемо дотримуватися при кодуванні base64. Кодування Base64 може обіцяти навіть вимірювання за допомогою 3 байтових наборів, на відміну від base16 та base256, де кожен байт може стояти самостійно.
То чому заохочується доповнення, хоча кодування може працювати нормально без символів заповнення?
Якщо довжина потоку невідома або корисно точно знати, коли закінчується потік даних, використовуйте відступ. Символи заповнення явно повідомляють, що ці зайві місця повинні бути порожніми, і виключає будь-яку двозначність. Навіть якщо довжина невідома з доповненням, ви будете знати, де закінчується ваш потік даних.
Як протилежний приклад, деякі стандарти, такі як JOSE , не дозволяють заповнення символів. У цьому випадку, якщо чогось не вистачає, криптографічний підпис не працюватиме або будуть відсутні інші символи, що не є базовими64 (наприклад, "."). Незважаючи на те, що припущення щодо довжини не зроблені, відступ не потрібен, оскільки якщо щось не так, це просто не спрацює.
І це саме те, що каже base64 RFC,
За деяких обставин використання заповнення ("=") у кодованих базовими даними даних не вимагається і не використовується. У загальному випадку, коли неможливо зробити припущення щодо розміру даних, що транспортуються, для отримання правильних декодованих даних потрібно заповнення.
[...]
Крок заповнення в базі 64 [...] при неправильній реалізації призведе до незначущих змін закодованих даних. Наприклад, якщо введенням є лише один октет для кодування базового 64, то використовуються всі шість бітів першого символу, але використовуються лише перші два біти наступного символу. Ці біти колодки ПОВИННІ бути встановлені на нуль за допомогою відповідних кодерів, що описано в описах нижче. Якщо ця властивість не виконується, немає канонічного представлення даних, закодованих базою, і кілька рядків, закодованих базою, можуть бути декодовані до одних і тих же двійкових даних. Якщо ця властивість (та інші, що обговорюються в цьому документі), виконується, гарантується канонічне кодування.
Заповнення дозволяє декодувати кодування base64 з обіцянкою відсутність втрачених бітів. Без заповнення більше не існує явного підтвердження вимірювання в трьох байтових пакетах. Без заповнення ви не зможете гарантувати точне відтворення оригінального кодування без додаткової інформації, яка зазвичай надходить з іншого місця у вашому стеці, наприклад TCP, контрольних сум або інших методів.
Приклади
Ось приклад форми RFC 4648 ( http://tools.ietf.org/html/rfc4648#section-8 )
Кожен символ усередині функції "BASE64" використовує один байт (base256). Потім ми перекладаємо це на base64.
BASE64("") = "" (No bytes used. 0%3=0.)
BASE64("f") = "Zg==" (One byte used. 1%3=1.)
BASE64("fo") = "Zm8=" (Two bytes. 2%3=2.)
BASE64("foo") = "Zm9v" (Three bytes. 3%3=0.)
BASE64("foob") = "Zm9vYg==" (Four bytes. 4%3=1.)
BASE64("fooba") = "Zm9vYmE=" (Five bytes. 5%3=2.)
BASE64("foobar") = "Zm9vYmFy" (Six bytes. 6%3=0.)
Ось кодер, з яким можна пограти: http://www.motobit.com/util/base64-decoder-encoder.asp