Base64 превръща произволни байтове (картинка, файл, парола) в текст само с букви, цифри, + и /. Ползва се навсякъде: в имейлите, в уеб страниците, в JSON. Напиши собствен кодер и декодер, без готовата функция.
Convert.ToBase64String и Convert.FromBase64String са забранени в решението. Позволени са само в самопроверката (етап 4), като еталон.>>, <<, &, |.b64 encode "текст", b64 decode "...".Три байта са 24 бита. Те се разделят на четири групи по 6 бита, а всяка група (число от 0 до 63) става един знак от азбуката:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
Пример с "Man":
Ако байтовете не се делят на 3, последната група се допълва с нулеви битове, а липсващите знаци се заместват с =.
| Вход | Изход |
|---|---|
Man | TWFu |
Ma | TWE= |
M | TQ== |
| (празен текст) | (празен текст) |
Hello, World! | SGVsbG8sIFdvcmxkIQ== |
Готово, когато: всички редове дават точно този изход.
SW5mb3JtYXRpa2E= трябва да се декодира до дума, която познаваш.TW*u), дължина, която не се дели на 4 (TWF), = по средата (TW=u).Готово, когато: decode(encode(x)) == x за всеки тест от етап 1.
| Вход | Букви | Изход |
|---|---|---|
Zdravej | 7 | WmRyYXZlag== |
Здравей | 7 | 0JfQtNGA0LDQstC10Lk= |
Буквите са равен брой, а резултатът е почти двойно по-дълъг. Защо? Изведи байтовете на двата текста в шестнайсетичен вид и обясни какво виждаш. Какво общо имат всички байтове, с които започва кирилска буква?
Генерирай 10 000 масива със случайни байтове със случайна дължина от 0 до 100. За всеки сравни своя резултат с Convert.ToBase64String, а после провери, че декодирането връща същите байтове.
Готово, когато: програмата отпечатва 10000 / 10000 OK. Ако някой случай се провали, отпечатва масива, за да го възпроизведеш.
Команда b64 hex файл, която показва произволен файл по 16 байта на ред: отместване, байтове в шестнайсетичен вид и видимите знаци.
00000000 53 37 4D 46 01 00 00 00 01 00 00 00 79 03 00 00 |S7MF........y...| 00000010 15 0C 00 00 04 00 BE 00 06 2B 11 C3 51 68 13 C3 |.........+..Qh..|
С него тренираш окото си за истински шестнайсетичен редактор. Той ще ти трябва скоро.
Кодирай малка PNG картинка и сглоби HTML страница, в която картинката е вътре в самия текст, без отделен файл:
<img src="data:image/png;base64,iVBORw0KGgo...">
Отвори страницата в браузъра. Защо Base64 версията е приблизително с една трета по-голяма от оригиналния файл?