Base64'te « encode » ve « decode » ne anlama geliyor?
Base64'e kodlamak (« encode base64 ») baytları — en sık UTF-8 ile kodlanmış bir metnin baytlarını — izin verilen 64 karakterlik bir diziye dönüştürür: 26 büyük harf, 26 küçük harf, 10 rakam ve + ve /. Base64 kod çözmek (« decode base64 ») tam olarak ters işlemi yapar: dizi 4 karakterlik paketler halinde okunur, her karakter 6 biti belirler ve 24 bit 3 bayt verir. « encode and decode base64 » yazarken çoğu insanın aradığı işte bu gidiş dönüş yoludur.
Base64 ne sıkıştırma ne de şifrelemedir: metin yaklaşık üçte bir uzar ve herkes bir saniyede okuyabilir. Amacı, yalnızca güvenli ASCII karakterleri kabul eden kanallarda bayt taşımaktır — URL, HTTP başlıkları, yapılandırma dosyaları, JSON, satır içi SVG, e-postalar ve metin tabanlı veritabanları.
Metni Base64'e nasıl kodlarım
Adım 1: metin önce seçilen karakter kümesine göre baytlara kodlanır — varsayılan UTF-8, ancak Latin-1, Windows-1252, ASCII veya UTF-16 eski sistemler için hâlâ kullanışlıdır. Adım 2: baytlar üçer üçer okunur, yani 24 bit. Adım 3: bu 24 bit altışar bitlik dört bloğa bölünür ve her blok, alfabedeki karşılık gelen konumdaki karakterle değiştirilir. Adım 4: son grup eksikse sıfır bitlerle tamamlanır ve dizi bir veya iki = (padding) ile kapatılır.
Adım adım örnek: « AB » sırasıyla ondalıkta 65 ve 66'dır, yani 01000001 01000010. Üç bayt ve dolgu ile: 01000001 01000010 00000000. Altı bitlik dört grup şunlardır 010000 010100 001000 000000 → konumlar 16, 20, 8, 0 → QUI=. Kodlayıcıya yalnızca « AB » yazın: sonuç, tuşu bırakmadan önce bile görünür.
Base64'ü metne nasıl çözerim
Kod çözme işlemi, olası satır sonları ve boşluklar çıkarıldıktan sonra diziyi 4 karakterlik gruplar halinde okur. Her karakter 6 bitlik değeriyle değiştirilir, dört değer 24 bitle birleştirilir ve ardından 24 bit 3 bayta bölünür. Sondaki = işaretleri son grupta kaç yararlı bayt olduğunu gösterir: tek = 2 bayt, çift = 1 bayt demektir.
Dizide - veya _ varsa bu, URL-safe varyantıdır: araç bunları kod çözmeden önce otomatik olarak + ve / karakterlerine dönüştürür. Padding eksikse, « Padding'i düzelt » düğmesi onu yeniden ekler. Alfabe dışı bir karakter, yanlış yerde bir sekme veya 4'ün katı olmayan bir uzunluk durumunda hata, basit bir « geçersiz » yerine tam nedeniyle gösterilir.
URL-safe varyant (RFC 4648 §5)
Standart Base64 şunları kullanır + ve /, URL'de sorun çıkaran iki karakter: bunlardan + çoğu sunucu tarafından boşluk olarak yorumlanır ve / yol ayracı sanılabilir. URL-safe varyant bunları - ve _, hiç kaçış gerekmez. Şunlarda zorunludur: JWT (bir jetonun üç segmenti paddingsiz kodlanır), çerezler, kimlikler ve URL parametrelerinde.
Padding « = » : ne işe yarar
Base64 4 karakterlik gruplarla çalışır, ancak bir dosyanın boyutu neredeyse hiç 3'ün katı olmaz. Padding beklenen uzunluğu yeniden sağlar: kalan 1 bayt için ==, kalan 2 bayt için =. Bazı sistemler bunu kaldırır (bazı API'ler, Base64URL); bazıları ise ister (PHP, eski kod çözücüler). Kodlayıcının « Padding'siz » seçeneği ve kod çözücünün « Padding'i düzelt » düğmesi iki durumu da kapsar.
Karakter kodlaması: UTF-8, Latin-1, UTF-16
Base64 karakterleri tanımaz, yalnızca baytları tanır. Dolayısıyla asıl soru şu: metin, Base64'e kodlanmadan önce ne ile kodlanır ? UTF-8'de « é » 2 bayttır ve « 日 » 3 bayt; Latin-1'de « é » 1 bayta sığar ama « 日 » imkânsız hale gelir. Latin-1 ile kodlanmış bir dizinin UTF-8 ile çözülmesi bozuk karakterler üretir (« mojibake »). Çevrimiçi bir araca danışıp sonuç anlaşılamıyorsa neredeyse her zaman başlangıç kodlaması farklıdır — buradaki altı seçenek bu yüzden var.
Dosya, data URI ve Base64 görselleri
Bir data URI şu biçime sahiptir: data:<MIME türü>;base64,<veri>. Bir görseli doğrudan CSS, HTML veya JSON içine gömmeye izin verir: background-image:url(data:image/png;base64,iVBOR…). Kod çözmek için tüm diziyi « Dosya ⇄ Base64 » sekmesine yapıştırın: MIME türü çıkarılır, ad önerilir, ardından dosya yeniden üretilir ve indirilebilir. Boyuta dikkat: Base64 yaklaşık %33 ekler ve bir data URI asla ayrı ayrı önbelleğe alınmaz.
Base64, URL-encoding ve neden karıştırılmamalı
Buna karşılık percent-encoding (%20, %C3%A9) izin verilmeyen her baytı yüzde işaretiyle değiştirir: Base64'ten iki ila üç kat uzun ama gözde orijinal metni korur. Base64 compact ve düzgün bir dizi üretir; blob'lar için mükemmeldir ama okunmaz. « URL & data URI » sekmesi iki dönüşümü yan yana sunar; bir URL'yi kaçıştırması gerekirken Base64'e klasik hatasını — ya da tersini — önler.
Günlük formatlarda Base64
Base64 her yerdedir: bir JWT'ün üç segmenti, bir src niteliği (satır içi bir SVG görselinde), bir cert alanı (bir PDF'te), e-postalardaki MIME ekleri (RFC 2045), Authorization: Basic API'lerinde (kullanıcı:şifre) ve .pem dosyaları ve SSH anahtarları, şunların içeriği: .docx ve .xlsx (ZIP), istemci deposundaki avatarlar ve otomatik testlerin data- öznitelikleri. Hızlıca kodlayıp kod çözebilmek, tek bir dizi için terminal açmayı önler.
Base64'ün olmadığı şey
Base64 hiçbir şeyi şifrelemez: kodlanmış bir dizi tek satırlık kodla çözülür. Onu asla parola, API anahtarı veya kişisel veri koruması olarak kullanmayın. Bu bir sıkıştırma da değildir: her zaman %33 fazla hacim planlayın. Son olarak Base64, birkaç megabaytın ötesinde zaten yoğun sıkıştırılmış ikili veriler (PNG, ZIP) için uygun değildir; bellek maliyeti yük olmaya başlar.
Performans ve iyi uygulamalar
Tarayıcıda, TextEncoder ve TextDecoder saniyede birkaç megabayt işler; Base64 algoritması kendisi doğrusaldır, özyineleme yoktur ve karakter başına önbellek ayırma yoktur. 5 MB'tan büyük dosyalar arayüzü yavaşlatabilir: daha büyük partiler için Web Worker'da veya sunucu tarafında işlemeyi tercih edin. Her zaman orijinal kodlamayı diziyle birlikte belgeleyin ve bir sonucu veritabanına kaydetmeden önce round-trip'i (kodlayıp sonra çözmeyi) test edin.
Kimler için önerilir
Back-end ve front-end geliştiricileri (jetonlar, data URI, HTTP başlıkları), entegratörler ve teknik yazarlar (satır içi SVG, arka plan görselleri), sistem yöneticileri ve DevOps (sertifikalar, anahtarlar, dökümler), testçiler ve pentest'çiler (Authorization Basic, parametre fuzzing'i), öğrenciler (baytları, ASCII'yi ve UTF-8'i anlamak) ve bir çevrimiçi Base64 çevirici ve kod çözücü arayan herkes: hızlı, kapsamlı ve gizli.