UTF-8’i Base64URL’ye dönüştürmek için 4 adımı izleyin: (1) metni UTF-8 baytlarına kodlayın, (2) standart Base64 uygulayın, (3) + → - ve / → _ olarak değiştirin, (4) sondaki = dolgusunu kaldırın. Bu, RFC 4648 uyarınca URL-güvenli bir dize üretir ve JWT’lerde ile API başlıklarında kullanılır.
Standart Base64 vs. Base64URL
| Karakter | Standart Base64 | Base64URL | Neden |
|---|---|---|---|
| 62. karakter | + |
- |
+, URL’lerde boşluk anlamına gelir |
| 63. karakter | / |
_ |
/, URL’lerde yol ayırıcıdır |
| Dolgu | = gerekli |
Atlanmış | =, URL’lerde %3D olur |
| URL-güvenli | Hayır | Evet | Sorgu dizelerinde ve dosya adlarında doğrudan kullanım |
RFC 4648 §5 uyarınca, bu “URL ve Dosya Adı Güvenli Alfabesi” sistemler arası uyumluluğu garanti eder.

4 Adımlı Dönüştürme Süreci
| Adım | İşlem | Örnek (“Hello”) |
|---|---|---|
| 1 | UTF-8 metni → baytlar | H e l l o → bayt dizisi |
| 2 | Baytlar → standart Base64 | SGVsbG8= |
| 3 | + → -, / → _ olarak değiştir |
Burada değişiklik gerekmiyor |
| 4 | Sondaki = dolgusunu kaldır |
SGVsbG8 |
Base64 kodlaması, veri boyutunu Wikipedia‘ya göre yaklaşık ~%33 artırır.

Unicode ve Emoji İşleme
NextUtils‘a göre, Base64 kodlamadır, şifreleme değil — verileri yalnızca metin kanallarından geçirir. Unicode/emoji’yi bozulma olmadan (“Mojibake”) işlemek için, önce UTF-8 baytlarına dönüştürmek üzere her zaman TextEncoder kullanın.
| Girdi | TextEncoder Olmadan | TextEncoder İle |
|---|---|---|
Hello 世界! 🌍 |
Mojibake / TypeError | Doğru Base64URL |
Kod Örnekleri
JavaScript (Tarayıcı) — Unicode-Güvenli
function toBase64Url(str) {
const bytes = new TextEncoder().encode(str);
const base64 = btoa(String.fromCharCode(...bytes));
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}
Python 3 — Standart Kütüphane
AskPython‘a göre:
import base64
data = "Hello 世界! 🌍"
encoded = base64.urlsafe_b64encode(data.encode('utf-8')).decode('utf-8').rstrip('=')
print(encoded)
Node.js — Buffer Dönüştürme
const str = "API_Payload_Data";
const base64url = Buffer.from(str, 'utf8')
.toString('base64')
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=/g, '');
Sorun Giderme: Dolgu Hataları
| Hata | Neden | Çözüm |
|---|---|---|
binascii.Error: Incorrect padding |
Eksik = dolgusu |
Uzunluk 4’ün katı olana kadar = ekleyin |
TypeError ile atob() |
ASCII olmayan karakterler | Önce TextEncoder kullanın |
| Bozuk çıktı | UTF-8 kodlama atlandı | Base64’ten önce her zaman baytlara kodlayın |
AskPython‘a göre, eksik dolguyu hesaplayın: padding_needed = (4 - len(data) % 4) % 4, ardından o kadar = karakteri ekleyin.
Kullanım Senaryoları: JWT ve Data URI’leri
JWT (JSON Web Token) Yapısı
| Bölüm | İçerik | Kodlama |
|---|---|---|
| Başlık | Algoritma + token türü | Base64URL |
| Yük | Talepler (kullanıcı verileri, son kullanma) | Base64URL |
| İmza | HMAC veya RSA imzası | Base64URL |
JWT’ler genellikle eyJ ile başlar — bu, { (JSON açılış ayracı) karakterinin Base64URL kodlamasıdır.

Kullanım Senaryosuna Göre Base64 vs. Base64URL
| Kullanım Senaryosu | Kodlama | Dolgu |
|---|---|---|
| JWT token’ları | Base64URL | Atlanmış |
| Data URI’leri (gömülü görüntüler) | Standart Base64 | Gerekli |
| HTTP Basic Auth | Standart Base64 | Gerekli |
| URL sorgu parametreleri | Base64URL | Atlanmış |
Sonuç
4 adım: UTF-8 baytları → Base64 → +/ karakterlerini -_ ile değiştir → dolguyu kaldır. JavaScript’te TextEncoder, Python’da base64.urlsafe_b64encode(), Node.js’te Buffer kullanın. Sistemler arası uyumluluk için RFC 4648’e uyun. Base64URL kodlamadır, şifreleme değil — güvenlik için AES-256 veya TLS kullanın.
SSS
Base64URL şifrelemeyle aynı şey mi?
Hayır. Base64URL tersine çevrilebilir bir kodlamadır — herhangi birisi bir anahtar olmadan çözebilir. Hassas verileri güvenli hale getirmek için AES-256 veya TLS/SSL kullanın.
Base64URL neden standart bir Base64 çözücüsünde başarısız oluyor?
Standart çözücüler +, / ve = dolgusu bekler. Base64URL, -, _ kullanır ve dolguyu atlar. Çözmek önce karakter değişimlerini geri alın ve dolguyu geri ekleyin.
JWT’lerde dolgu neden atlanıyor?
= karakteri URL’lerde %3D olur ve bu da dizeleri daha uzun ve okunması daha zor hale getirir. RFC 4648, çözücülerin dolgu işaretleri olmadan orijinal uzunluğu yeniden yapılandırabileceği için atlamaya izin verir.

Bir yanıt yazın