Base64url, URL'lerde, dosya adlarında ve standart Base64 karakterlerinden + ile /'nin sorun çıkardığı diğer bağlamlarda kullanılmak üzere özel olarak tasarlanmış bir Base64 kodlama varyantıdır. RFC 4648 Bölüm 5'te tanımlanan Base64url, +'yı - (kısa çizgi) ve /'yi _ (alt çizgi) ile değiştirir; sondaki = dolgu karakterlerini ise çıkarır. Sonuç olarak elde edilen dize, ek yüzde-kodlama gerekmeksizin doğrudan bir URL sorgu parametresine, dosya adına veya HTTP başlığına gömülebilir.
Standart Base64 (RFC 4648 Bölüm 4), 64 karakter kullanır: A–Z, a–z, 0–9, + ve /. + ve / karakterleri URL'lerde özel anlam taşır: + karakter, sorgu dizelerinde (application/x-www-form-urlencoded) boşluk olarak yorumlanır; / ise yol sınırlayıcısıdır. Standart Base64'ü bir URL içinde kullanmak bu nedenle bu karakterlerin yüzde-kodlanmasını (%2B, %2F) gerektirir; bu da dizeyi uzatır ve okunmasını güçleştirir. Base64url, başından itibaren URL-güvenli karakterler kullanarak bu sorunu tamamen ortadan kaldırır.
Base64url'nin en belirgin kullanım alanı JSON Web Token'larıdır (JWT). Bir JWT'nin üç bölümünün tamamı — başlık, yük ve imza — Base64url ile kodlanmıştır. OAuth 2.0 PKCE kod doğrulayıcıları, WebAuthn sınama değerleri ve pek çok API token şeması da Base64url'ye dayanır. Kimlik doğrulama, yetkilendirme veya şifreli veri alışverişiyle çalışan her geliştirici için bu kodlamayı anlamak vazgeçilmezdir.
Bu Base64url Aracını Neden Kullanmalısınız?
Tarayıcınızda doğrudan Base64url ile metin veya ikili veri arasında dönüşüm yapın. Dolgu ve karakter değişimi otomatik olarak yönetilirken hem kodlama hem de kod çözme desteklenmektedir. Bir JWT token'ını hata ayıklıyor, PKCE kod doğrulaması oluşturuyor veya parola sıfırlama bağlantıları için URL-güvenli tanımlayıcılar üretiyor olun, bu araç her şeyi tarayıcınızda yerel olarak sıfır gecikmeyle ve sunucuya gidiş-dönüş gerektirmeksizin işler. Buraya yapıştırdığınız hiçbir veri cihazınızın dışına iletilmez.
⚡
Anlık Dönüşüm
Siz yazarken çıktı güncellenir. Metni Base64url'ye kodlayın ya da Base64url'yi metne geri çözün — sıfır gecikme, form gönderimi veya sayfa yenilemesi yok.
🔗
URL-Güvenli Çıktı
Çıktı yalnızca URL'lerde, dosya adlarında ve HTTP başlıklarında güvenli olan karakterler kullanır: A–Z, a–z, 0–9, kısa çizgi ve alt çizgi. Yüzde-kodlamaya gerek yoktur.
🔒
Gizlilik Öncelikli İşleme
Tüm kodlama ve kod çözme işlemleri tarayıcınızda yerel olarak çalışır. Buraya yapıştırdığınız JWT token'ları, OAuth gizli anahtarları ve API anahtarları hiçbir sunucuya iletilmez.
🏛️
Standartlara Uyumlu
RFC 4648 Bölüm 5'i tam olarak uygular: + ve /'nin yerine - ve _ kullanılır, dolgu çıkarılır. JWT kütüphaneleri, OAuth 2.0 PKCE ve WebAuthn uygulamalarıyla uyumludur.
Base64url Kullanım Alanları
JWT Token İncelemesi
Bireysel JWT bölümlerini (başlık, yük) imzayı doğrulamadan veya JWT kütüphanesi içe aktarmadan iddiaları, son kullanma sürelerini ve imzalama algoritmalarını incelemek için çözün.
OAuth 2.0 PKCE Akışı
PKCE code_verifier ve code_challenge değerlerini oluşturun ve doğrulayın. code_challenge_method S256, code_verifier'ın Base64url ile kodlanmış SHA-256 özetini gerektirir.
WebAuthn / FIDO2 Entegrasyonu
WebAuthn sınaması, kimlik bilgisi kimliği ve onay verileri, tarayıcı ile güvenen taraf sunucusu arasında Base64url dizeleri olarak iletilir. Kayıt ve kimlik doğrulama akışlarında hata ayıklamak için bunları çözün.
API Token Oluşturma
Parola sıfırlama bağlantıları, e-posta doğrulama ve oturum tanımlayıcıları için rastgele baytlardan URL-güvenli token'lar oluşturun. Base64url, kaçış karakteri kullanmadan URL'lerde çalışan kompakt dizeler üretir.
DevOps ve CI/CD Süreçleri
İkili yapılandırma değerlerini (sertifikalar, anahtarlar) ortam değişkenlerinde veya YAML dosyalarında Base64url dizeleri olarak saklayın. Standart Base64'ün aksine çıktı, kabuk genişlemesi veya YAML söz dizimiyle çakışan hiçbir karakter içermez.
Veri Mühendisliği
İkili tanımlayıcıları, karma değerleri veya sağlama toplamlarını, + ve / karakterlerinin ayrıştırmayı bozacağı veya kaçış karakteri gerektireceği dosya adlarında, veritabanı anahtarlarında ya da CSV sütunlarında kullanmak üzere Base64url ile kodlayın.
Standart Base64 ile Base64url Karşılaştırması
Base64url, standart Base64'ten tam olarak üç noktada farklılaşır. Kodlama algoritması aynıdır — yalnızca alfabe ve dolgu davranışı değişir:
Özellik
Standart (RFC 4648 §4)
Base64url (RFC 4648 §5)
Index 62
+
-
Index 63
/
_
Padding
= (required)
Omitted
Bu üç fark, standart Base64 ile Base64url arasında dönüşümün son derece basit olduğu anlamına gelir: + karakterini - ile, / karakterini _ ile değiştirin ve sondaki = karakterlerini kaldırın. Tersi için - yerine +, _ yerine / koyun ve uzunluğun 4'ün katı olması için dolgu ekleyin. Çoğu dil yerel Base64url desteği sunduğundan manuel dönüşüm gereksizdir. Her iki dönüşüm de tamamen geri alınabilir ve kayıpsızdır; orijinal bayt dizisini eksiksiz korur. Bu birlikte çalışabilirlik, her iki kodlama varyantını da tanımlayan RFC 4648 spesifikasyonu tarafından güvence altına alınmıştır. Uygulamada modern programlama dillerinin büyük çoğunluğu yerel Base64url desteği sunmakta olup manuel dönüşümü gereksiz kılmaktadır.
Kodlama Karşılaştırma Tablosu
Aşağıdaki tablo, aynı girişlerin standart Base64 ve Base64url ile kodlanmış hallerini göstermektedir. URL-güvenli varyantda dolgu karakterlerinin (=) nasıl kaldırıldığına ve + / /'nin - / _ ile nasıl değiştirildiğine dikkat edin:
Giriş
Standart Base64
Base64url (dolgu yok)
Hello
SGVsbG8=
SGVsbG8
A
QQ==
QQ
1+1=2
MSsxPTI=
MSsxPTI
subject?ref=1
c3ViamVjdD9yZWY9MQ==
c3ViamVjdD9yZWY9MQ
ð (thumbs up)
8J+RjQ==
8J-RjQ
Kod Örnekleri
Popüler dillerde Base64url dizelerini kodlamak ve çözmek için kullanılan yöntemler. Her örnek, URL'lerde, dosya adlarında ve HTTP başlıklarında güvenle kullanılabilecek çıktı üretir:
package main
import (
"encoding/base64"
"fmt"
)
func main() {
// Encode to Base64url (no padding)
encoded := base64.RawURLEncoding.EncodeToString([]byte("Hello!"))
fmt.Println(encoded) // → "SGVsbG8h"
// Decode from Base64url
decoded, _ := base64.RawURLEncoding.DecodeString("SGVsbG8h")
fmt.Println(string(decoded)) // → "Hello!"
}
Sıkça Sorulan Sorular
Base64 ile Base64url arasındaki fark nedir?
Base64url, standart Base64 alfabesindeki + karakterini - ile, / karakterini _ ile değiştirir ve sondaki = dolgu karakterlerini çıkarır. Bu sayede çıktı, ek kodlama gerekmeksizin URL'lerde, sorgu parametrelerinde, dosya adlarında ve HTTP başlıklarında kullanılabilir hale gelir. Temel algoritma (baytları ASCII karakterlerine eşlenen 6 bitlik gruplara bölme) aynıdır. Uygulamada Base64url dizeleri, URL'lerde ve HTTP başlıklarında herhangi bir değişiklik yapılmadan doğrudan kullanılabilirken standart Base64 dizeleri bu bağlamlarda yüzde-kodlama (+ için %2B, / için %2F) gerektirir. Bu durum, Base64url'yi bir URL'ye gömülü token veya tanımlayıcılar için tercih edilen kodlama yapar.
JWT token'ları neden standart Base64 yerine Base64url kullanır?
JWT'ler sıklıkla URL sorgu parametrelerinde ve HTTP Authorization başlıklarında iletilir. Standart Base64 karakterleri + ve /, URL'lerde yüzde-kodlanması gerekir; bu da dize uzunluğunu artırır ve basit dize karşılaştırmalarını bozar. JWT spesifikasyonu (RFC 7519), token'ların varsayılan olarak kompakt ve URL-güvenli olmasını sağlamak için dolgu içermeyen Base64url kullanımını zorunlu kılar.
Standart Base64'ü Base64url'ye nasıl dönüştürebilirim?
Her + karakterini - ile, her / karakterini _ ile değiştirin ve sondaki tüm = karakterlerini kaldırın. JavaScript'te: base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''). Python'da: base64.urlsafe_b64encode(data).rstrip(b'='). Modern dillerin büyük çoğunluğu ayrıca özel bir Base64url kodlama fonksiyonu sunmaktadır. Bu dönüşüm, standart Base64 üreten eski kütüphaneleri JWT doğrulayıcıları, OAuth 2.0 sunucuları ve WebAuthn güvenen taraf uygulamaları gibi Base64url bekleyen modern sistemlerle entegre ederken sıklıkla gereklidir.
Base64url kodlaması geri alınabilir mi?
Evet, Base64url tamamen geri alınabilir. Kod çözmek için - yerine + ve _ yerine / koyun, uzunluğun 4'ün katı olması için = dolgu karakterlerini ekleyin, ardından standart Base64 olarak çözün. Kod çözülmüş çıktı, orijinal girişle birebir aynıdır.
Verileri şifrelemek için Base64url kullanabilir miyim?
Hayır. Base64url bir kodlamadır, şifreleme değildir. İkili veriyi herkesin çözebileceği, gizlilik içermeyen bir metin biçimine dönüştürür. Veriyi korumak istiyorsanız önce uygun bir algoritmayla (AES, ChaCha20) şifreleyin, ardından şifreli metni aktarım için Base64url ile kodlayın. Bu amaçla yaygın kullanılan şifreleme algoritmaları arasında simetrik şifreleme için AES-256-GCM ve asimetrik anahtar sarmalama için RSA-OAEP yer almaktadır. Her zaman önce şifreleyin, ardından ortaya çıkan şifreli metni Base64url ile kodlayın.
Base64url'de dolgu neden çıkarılır?
Kod çözücü, eksik bayt sayısını dize uzunluğundan hesaplayabildiğinden dolgu karakterleri (=) gereksizdir: (4 - length % 4) % 4 formülü gerekli dolgu miktarını verir. Dolguyu çıkarmak dizeyi kısaltır ve URL'lerde yüzde-kodlanması gereken = karakterlerinden kaçınılmasını sağlar. RFC 4648 Bölüm 5, Base64url'de dolgunun çıkarılmasına açıkça izin verir.
Kodumda dolgu içeren Base64url dizelerini nasıl işlerim?
Bazı sistemler = dolgu içeren Base64url dizeleri üretir. Çoğu kod çözücü bunu doğru şekilde işler. Eğer sizinki işlemiyorsa, kod çözmeden önce sondaki = karakterlerini kaldırın. Tersine, bir kütüphane dolgu gerektiriyorsa hesaplayıp ekleyin: const padded = str + '='.repeat((4 - str.length % 4) % 4). Bu yöntem, dolgu sayısının dize uzunluğundan belirlenebilir olması nedeniyle her zaman işe yarar.