Яка мета базового кодування 64 та чому воно використовується в базовій аутентифікації HTTP?


129

Я не отримую шифрування Base64.

Якщо можна розшифрувати рядок Base64, яка його мета?

Чому він використовується для авторизації HTTP Basic?

Це як сказати комусь, що мій пароль повернуто в OLLEH.

Люди, які бачать OLLEH, знають, що оригінальним паролем був HELLO.




10
base64 - не шифрування, це кодування
n611x007

Відповіді:


248

Base64 - це не шифрування - це кодування. Це спосіб представлення двійкових даних, використовуючи лише друковані (текстові) символи.

Дивіться цей параграф на сторінці вікіпедії щодо базової автентифікації HTTP :

Хоча кодування імені користувача та пароля за допомогою алгоритму Base64 зазвичай робить їх нечитатими неозброєним оком, вони так само легко розшифровуються, як і кодуються. Безпека не є метою кроку кодування. Скоріше, мета кодування полягає в кодуванні символів, не сумісних з HTTP, які можуть бути в імені користувача або паролі, до тих, які сумісні з HTTP.


4
Крім того, видається, що відповідне кодування символів для отримання "двійкових даних" з рядка повинно бути iso-8859-1 . ( джерело )
Myobis

60

Зазвичай це кодування base64, а не шифрування! Приємна річ у кодуванні base64 полягає в тому, що вона дозволяє представляти (бінарні) дані, використовуючи лише обмежений, загальний підмножина доступних символів, набагато ефективніше, ніж просто записувати рядок з 1 і 0, наприклад, як ASCII.


6
+1, але порівняння зі збереженням даних у потоці 1s, 0s занадто перебільшено. Краще порівняти це зі зберіганням даних у шестигранному форматі. Оскільки шістнадцятковий би робив x2більше байтів, ніж оригінальний потік, а 1s, 0s - робить у x8рази більше байтів. (І Base64 робить x1.3більше даних, ніж оригінальний масив байтів). Тому іноді допустимо кодувати бінарний потік як шістнадцяткову рядок, удвічі збільшуючи кількість байтів - наприклад, просто для зберігання хешу пароля в базі даних.
Агній Василіяускас

30

Власна крипти іона вимагає ключа (рядок або алгоритм) для того , щоб дешифрувати; звідси "крипта" (корінь: криптографія )

En COD ІНГ модифікує / зміни / змінює код символу в інший. У цьому випадку звичайні байти даних тепер можуть бути легко представлені та перенесені за допомогою HTTP.


5
Шифрування просто означає "зробити прихованим" - криптографія на основі ключів - це зовсім недавній винахід. Шифрування - це форма кодування, яка використовувалася як шифрування (хоча не особами старше 12 років протягом сотень років).

2
Шифрування у простомовній формі використовується для позначення останніх режимів шифрування, зокрема комп'ютерного шифрування, заснованого на ключах (відкритий / приватний ключ). Незважаючи на те, що це правда, непотрібно вказувати буквальне визначення датованого слова; в іншому випадку ви б сперечалися з історичним визначенням багатьох англійських слів, які сьогодні використовуються. Просторіччя (а іноді і розмовне) - це те, що дає слова контексту та, таким чином, визначення.
vol7ron

1
Я не думаю, що ти звучав грубо; Я погоджуюся з вашою точкою про сучасний контекст. Слова та визначення постійно розвиваються. Я думаю, що "кодувати" і "шифрувати", безумовно, мають два дуже чіткі визначення у сучасних обчисленнях, і ваша відповідь докладає великих зусиль при узагальненні відмінностей.
Ден Бешард

Кодування Base64 - це форма обтурації, яка просто означає зробити незрозумілою. Для багатьох застосунків це достатньо шифрування, коли мета полягає в тому, щоб, наприклад, маніпулювати будь-яким чітким текстом, надісланим по дроту.
Домінік Серісано

6
@DominicCerisano: Ні, кодування base64 не вважається шифруванням, і, сподіваюся, ви не використовуєте його для захисту нічого.
Ри-

19

У щоденній мові «код» - це щось таємне. У науці та техніці кодекс - це просто угода, набір правил того, як щось написати.

Цей код може бути секретним. У такому випадку це називається шифруванням. Але загалом код не є секретом. Візьміть генетичний код. Він просто стверджує , що наша ДНК побудована з чотирьох різних баз -  A, C, GіT та що три основи разом утворюють одну амінокислоту. Також є таблиця, з якої три букви утворюють амінокислоту.

У цьому коді немає нічого секретного.

Так само Base64 не є секретним кодом. Скоріше, це код, який дозволяє зберігати дані в шість біт на символ (таким чином, існує 64 різних сутності, тобто "база" системи - 64, як і база нашої десяткової системи - 10, оскільки існує 10 різних сутностей називається "цифрами").



17

Кодування Base-64 є частиною специфікацій MIME. Це забезпечує безпеку транспорту для кодування для даних, які не будуть розжовуватися, якщо / коли вони передаються через хост, який використовує іншу схему кодування, ніж та, що використовується оригінальним клієнтом.

На інтертубах існує багато різних хостів, і ви не можете реально взяти на себе підтримку нічого, крім 7-бітного ASCII, не ризикуючи втратою / плутаниною даних.

Наприклад, мейнфрейми IBM використовують кодування під назвою EBCDIC (яке має безліч різних смаків). Це кодові точки абсолютно відрізняються від кодових точок, які використовуються путерами на основі ASCII - в ASCII літери AZ 0x41 - 0x5A; в EBCDIC літери A - Z не є навіть суміжним діапазоном: букви AI живуть при 0xC1 - 0xC9, літери JR живуть при 0xD1 - 0xD9, а літери SZ - при 0xE2 - 0xE9.


0

За замовчуванням параметри поля заголовка повідомлень у повідомленнях протоколу передачі гіпертексту (HTTP) не можуть містити символи поза набором символів ISO-8859-1.

Якщо ім'я користувача та пароль містять несумісну діаграму, HTTP не зможе перенести цей текст. щоб не допустити цього, ми кодуємо ім'я користувача та пароль з base64, щоб переконатися, що ми надсилаємо HTTP-сумісний номер через HTTP. для отримання додаткової інформації див. цю базову_доступність_аутентифікації

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.