Apa tujuan encoding basis 64 dan mengapa digunakan dalam HTTP Basic Authentication?

129

Saya tidak mendapatkan enkripsi Base64.

Jika seseorang dapat mendekripsi string Base64, apa tujuannya?

Mengapa ini digunakan untuk autentikasi HTTP Basic?

Ini seperti memberi tahu seseorang kata sandi saya dibalik menjadi OLLEH.

Orang yang melihat OLLEH akan tahu kata sandi asli adalah HALO.

ajsie
sumber
10
base64 bukan merupakan enkripsi, ini adalah penyandian
n611x007

Jawaban:

248

Base64 bukan enkripsi - ini adalah penyandian. Ini adalah cara untuk merepresentasikan data biner menggunakan hanya karakter (teks) yang dapat dicetak.

Lihat paragraf ini dari halaman wikipedia untuk Otentikasi Dasar HTTP :

Sementara penyandian nama pengguna dan kata sandi dengan algoritma Base64 biasanya membuat mereka tidak dapat dibaca oleh mata telanjang, mereka dengan mudah diterjemahkan sebagai mereka dikodekan. Keamanan bukan maksud dari langkah penyandian. Sebaliknya, maksud pengkodean adalah untuk menyandikan karakter yang tidak kompatibel dengan HTTP yang mungkin ada dalam nama pengguna atau kata sandi ke karakter yang kompatibel dengan HTTP.

Matt Bridges
sumber
4
Juga, tampaknya pengkodean karakter yang relevan untuk mendapatkan 'data biner' dari string, harus iso-8859-1 . ( sumber )
Myobis
60

Biasanya disebut pengkodean base64, bukan enkripsi! Yang menyenangkan tentang pengkodean base64 adalah memungkinkan Anda untuk merepresentasikan data (biner) hanya dengan menggunakan subset umum yang terbatas dari karakter yang tersedia, jauh lebih efisien daripada hanya menulis string 1s dan 0s seperti ASCII misalnya.

Flexo
sumber
6
+1, tetapi dibandingkan dengan menyimpan data dalam 1s, streaming 0s terlalu berlebihan. Lebih baik membandingkannya dengan menyimpan data dalam format hex. Karena hex hanya akan menghasilkan x2lebih banyak byte dari stream asli, dan 1s, 0s - membuat x8kali lebih banyak byte. (Dan Base64 membuat x1.3lebih banyak data daripada array byte asli). Jadi kadang-kadang dapat diterima untuk menyandikan aliran biner sebagai string hex, menggandakan jumlah byte - misalnya hanya untuk menyimpan hash kata sandi dalam database.
Agnius Vasiliauskas
30

En crypt ion memerlukan kunci (string atau algoritma) untuk mendekripsi; karenanya "crypt" (root: cryptography )

En cod ing memodifikasi / menggeser / mengubah kode karakter menjadi yang lain. Dalam hal ini, byte data biasa sekarang dapat dengan mudah direpresentasikan dan diangkut menggunakan HTTP.

vol7ron
sumber
5
Enkripsi hanya berarti "untuk membuat tersembunyi" - kriptografi berbasis kunci adalah penemuan yang sangat baru. Penyandian adalah bentuk penyandian yang telah digunakan sebagai enkripsi (meskipun tidak oleh siapa pun yang berusia di atas 12 tahun selama ratusan tahun).
2
Enkripsi dalam bahasa sehari-hari digunakan untuk merujuk pada mode enkripsi terkini, khususnya enkripsi komputer, yang berbasis kunci (kunci publik / pribadi). Meskipun benar, tidak perlu menunjukkan definisi literal dari kata yang bertanggal; jika tidak, Anda akan mendebat definisi historis dari banyak kata bahasa Inggris yang digunakan hari ini. Yang vernakular (dan terkadang bahasa sehari-hari) adalah yang memberi konteks kata dan definisi.
vol7ron
1
Saya tidak berpikir Anda terdengar kasar; Saya setuju dengan poin Anda tentang konteks modern. Kata-kata dan definisi terus berkembang. Saya pikir "menyandikan" dan "mengenkripsi" pasti memiliki dua definisi yang sangat berbeda dalam komputasi modern dan jawaban Anda membuat upaya yang baik untuk merangkum perbedaan.
Dan Bechard
Pengkodean Base64 adalah bentuk kebingungan, yang hanya berarti membuat tidak jelas. Untuk banyak aplikasi, ini adalah enkripsi yang cukup di mana tujuannya hanya untuk memotong-motong teks yang jelas dikirim melalui kawat, misalnya.
Dominic Cerisano
6
@DominicCerisano: Tidak, pengkodean base64 tidak dihitung sebagai enkripsi, dan saya harap Anda tidak menggunakannya untuk melindungi apa pun.
Ry-
19

Dalam bahasa sehari-hari, "kode" adalah sesuatu yang rahasia. Dalam sains dan teknik, kode hanyalah sebuah perjanjian, seperangkat aturan, tentang cara menulis sesuatu.

Kode itu mungkin rahasia. Dalam hal ini, itu disebut enkripsi. Namun secara umum, kode bukanlah rahasia. Ambil kode genetiknya. Ini hanya menyatakan bahwa DNA kita dibangun dari empat basis yang berbeda -  A, C, Gdan Tdan tiga dasar diambil bersama-sama membentuk satu asam amino. Ada juga sebuah tabel di mana tiga huruf membentuk asam amino.

Tidak ada rahasia tentang kode ini.

Demikian juga, Base64 bukan kode rahasia. Sebaliknya, ini adalah kode yang memungkinkan penyimpanan data dalam enam bit per karakter (sehingga ada 64 entitas yang berbeda, yaitu "basis" dari sistem adalah 64, sama seperti basis dari sistem desimal kami adalah 10, karena ada 10 entitas yang berbeda disebut "digit").

Konrad Rudolph
sumber
17

Pengkodean basis-64 adalah bagian dari spesifikasi MIME. Ini memberikan pengkodean aman-transportasi untuk data yang tidak akan dikunyah jika / ketika itu disampaikan melalui host yang menggunakan skema pengkodean yang berbeda dari yang digunakan oleh klien asli.

Ada banyak host yang berbeda di intertubes dan Anda tidak dapat benar-benar menerima dukungan untuk apa pun selain ASCII 7-bit, tanpa risiko kehilangan data / kebingungan.

Mainframe IBM, misalnya, menggunakan pengkodean yang disebut EBCDIC (yang datang dalam banyak rasa yang berbeda). Codepoints ini benar-benar berbeda dari titik kode yang digunakan oleh 'puters berbasis ASCII - dalam ASCII, huruf AZ adalah 0x41 - 0x5A; dalam EBCDIC huruf A - Z bahkan bukan rentang yang berdekatan: huruf AI hidup pada 0xC1 - 0xC9, huruf JR hidup di 0xD1 - 0xD9 dan huruf SZ hidup di 0xE2 - 0xE9.

Nicholas Carey
sumber
0

Secara default, parameter kolom header pesan dalam pesan Hypertext Transfer Protocol (HTTP) tidak dapat membawa karakter di luar set karakter ISO-8859-1.

Jika nama pengguna dan kata sandi berisi charset yang tidak kompatibel dari HTTP tidak akan dapat membawa teks tersebut. untuk mencegah hal ini, kami menyandikan nama pengguna dan kata sandi dengan base64 untuk memastikan kami mengirim char HTTP kompatibel melalui HTTP. untuk informasi lebih lanjut lihat Basic_access_authentication ini

Varun
sumber