İçeriğe geç

Kodlayıcı / Çözücü rehberi

Araç rehberi. Güncellendi .

Base64, URL kodlaması ve HTML varlıkları ne işe yarar, XGM Kodlayıcı / Çözücü metni nasıl dönüştürür ve kodlama neden şifreleme değildir.

Base64 ne yapar

Base64 (RFC 4648) baytları üçerli gruplar halinde alır, 24 biti dört adet 6 bitlik gruba böler ve her grubu 64 karakterden birine eşler: A–Z, a–z, 0–9, + ve /. Girdinin uzunluğu üçün katı değilse son grubu = dolgusu tamamlar. Çıktı girdiden yaklaşık %33 daha büyüktür, ama yalnızca metin için tasarlanmış sistemlerden sağ çıkan karakterler içerir. Bu boyut artışı, güvenli taşımanın bedelidir: çıktıda denetim karakteri ya da sekizinci biti kırpan eski sistemleri şaşırtacak bir bayt kalmaz.

Hi! kelimesinin Base64 ile kodlanmasıHi! ifadesinin üç baytı 24 bit halinde birleştirilir, dört adet 6 bitlik gruba bölünür ve Base64 alfabesine eşlenerek SGkh elde edilir.Metin: Hi!UTF-8 baytları 0x48 0x69 0x2124 bit01001000 01101001 00100001Dört adet 6 bitlik grup010010 000110 100100 100001 = 18, 6, 36, 33Alfabede arama18 → S, 6 → G, 36 → k, 33 → hSonuç: SGkhGirdi 3 bayt olduğu için dolguya gerek yok
Hi! ifadesinin üç baytı 24 bit halinde birleştirilir, dört adet 6 bitlik gruba bölünür ve Base64 alfabesine eşlenerek SGkh elde edilir.

Yaygın kullanım alanları arasında e-posta ekleri (MIME), HTML ya da CSS içine küçük görseller gömen data URI'ler, JSON'daki ikili alanlar, HTTP Basic kimlik doğrulama başlıkları ve JSON Web Token'ların bölümleri vardır. Bu kanalların ortak yanı, ham baytları güvenle iletememeleridir; araya giren bir sunucu metni yeniden kodlayabilir, satır sonlarını değiştirebilir ya da ASCII dışı baytları bozabilir. Base64 bu riski ortadan kaldırır, çünkü çıktısı her sistemde aynı anlama gelen dar bir karakter kümesinden oluşur. Hepsinde amaç taşımadır, gizlilik değil.

Kodlayıcıda Base64 nasıl kullanılır

  1. Kodlayıcı / Çözücü aracını açın.
  2. Metni Base64'e çevirmek için Kodla, Base64'ü metne çevirmek için Çöz seçeneğini seçin.
  3. Base64url için “URL güvenli alfabe” kutusunu işaretleyin; bu alfabe - ve _ kullanır ve dolguyu atlar.
  4. Girdinizi yapıştırın; sonuç tarayıcınızda güncellenir ve kopyalanabilir.

Metin UTF-8 olarak kodlanır; bu yüzden ş, ü gibi karakterler ya da emojiler doğru şekilde işlenir. Çözme işlemi geçerli UTF-8 metni olmayan baytlar ürettiğinde, örneğin bir görsel ya da sıkıştırılmış veri söz konusuysa, araç okunamayan karakterler göstermek yerine içeriği ikili olarak bildirir. Seçtiğiniz mod adres çubuğunda ?mode=base64 olarak tutulur, bu yüzden doğrudan bu moda açılan bir bağlantıyı paylaşabilirsiniz; girdiniz ise hiçbir zaman URL'ye yazılmaz.

URL kodlaması, HTML varlıkları ve sayı tabanları

Kodlayıcı / Çözücü aracında Base64'ün yanında üç mod daha vardır. URL modu metni yüzde kodlamasından geçirir: tek bir sorgu değeri ya da yol parçası (encodeURIComponent, ki bu &, = ve / karakterlerini de kaçırır) veya bütün bir URL (encodeURI, ki bu adresi kuran karakterleri olduğu gibi bırakır) seçebilirsiniz. Doğru seçeneği belirlemek önemlidir: tam bir adresi encodeURIComponent ile kaçırırsanız : ve / karakterleri de kodlanır ve bağlantı kullanılamaz hale gelir. Çözme sırasında + işareti boşluk olarak ele alınabilir, çünkü HTML formları boşluğu böyle gönderir.

HTML varlıkları modu, HTML yapısını değiştiren beş karakteri (<, >, &, " ve ') kaçırır, istenirse ASCII dışı her karakteri de kaçırır ve adlandırılmış ile sayısal referansları çözer. Sayı tabanı modu ise her boyuttaki tam sayıyı ikilik, sekizlik, onluk, onaltılık ve 36 tabanı arasında yuvarlama yapmadan dönüştürür ve 0x, 0o ile 0b öneklerini kabul eder. Bu mod BigInt kullandığı için 64 bite sığmayan değerler bile tam olarak dönüşür; bu da bayrak maskeleri, izin bitleri ve büyük kimlik numaralarıyla çalışırken işe yarar.

Hangi iş için hangi kodlama
İşMod
JSON, e-posta ya da data URI içindeki ikili veriBase64
Sorgu dizesindeki bir değerURL, sorgu değeri
Kullanıcı metnini HTML içinde göstermekHTML varlıkları
Onaltılık dökümü ya da bit maskesini okumakSayı tabanı

Standart Base64 ve Base64url

Base64 çeşitleri (RFC 4648)
Çeşit62 ve 63 numaralı karakterlerDolguKullanıldığı yerler
Base64+ ve /= zorunluMIME e-posta, data URI'ler, çoğu API
Base64url- ve _Genellikle atlanırJWT'ler, URL'ler, dosya adları, WebAuthn

+ ve / karakterlerinin URL'lerde, = işaretinin ise sorgu dizelerinde özel anlamları vardır; bu yüzden bir URL içindeki standart Base64'ün ayrıca yüzde kodlamasından geçmesi gerekir. Base64url bu zahmeti ortadan kaldırır. Bir çeşit için yazılmış çözücüler genellikle diğerini reddeder; bir JWT bölümü standart bir çözücüye yapıştırıldığında sık sık “geçersiz Base64” hatası alınmasının nedeni budur. Aynı karışıklık ters yönde de görülür: URL güvenli bir değeri standart alfabeye çeviren bir kütüphane, dolgu eklemeyi unutursa uzunluk hatası verir.

Aynı baytların iki çeşitteki hali
Standard: +/+/Pz8=
URL-safe: -_-_Pz8

Base64 şifreleme değildir

Base64 hiçbir şeyi gizlemez. YWRtaW46c2VjcmV0 değerini gören herkes bunu bir saniyede admin:secret olarak çözebilir; bir HTTP Basic kimlik doğrulama başlığının içeriği tam olarak budur. Parolaları Base64 ile “kodlanmış” biçimde tutan yapılandırma dosyaları ve günlükler, pratikte onları düz metin olarak saklıyor demektir. Bir sırrı gerçekten korumak için bir anahtar gerekir; kodlamada anahtar yoktur, yalnızca herkesin bildiği bir alfabe vardır.

Kodlanmış sırlar hâlâ sırdır

Base64 ile kodlanmış kimlik bilgilerini, API anahtarlarını ve token'ları tıpkı düz hâlleri gibi ele alın. Gerçek değerleri destek kayıtlarına, sohbetlere ya da genel araçlara yapıştırmayın; onları korumak için düzgün bir şifreleme ya da bir sır yöneticisi kullanın.
Basic kimlik doğrulama başlığı
Authorization: Basic YWRtaW46c2VjcmV0
# decodes to admin:secret; only TLS protects it in transit

Base64 ile nerede karşılaşırsınız

Base64'ün sık göründüğü yerler
YerNasıl görünürÇeşit
E-posta ekleriContent-Transfer-Encoding: base64 altında 76 karakterlik satır bloklarıStandart, satırlara bölünmüş
Data URI'lerdata:image/png;base64,iVBORw0KGgo…Standart
JSON Web Token'lareyJ ile başlayan, noktayla ayrılmış üç bölümBase64url
HTTP Basic kimlik doğrulamaAuthorization: Basic …Standart
Kubernetes secret'larıSecret manifestlerindeki data: alanlarının değerleriStandart
DKIM anahtarları ve sertifikalarDKIM kayıtlarındaki p= değeri, PEM bloklarıStandart
Subresource Integrityintegrity="sha384-…"Standart

eyJ öneki kullanışlı bir ipucudur: bu önek {" ifadesinin Base64 karşılığıdır, dolayısıyla bununla başlayan dizeler genellikle kodlanmış JSON, çoğu zaman da bir JWT olur. Benzer şekilde PEM dosyaları -----BEGIN ve -----END satırları arasındaki Base64'ten oluşur, data URI'ler ise yükten önce her zaman ;base64, içerir. Bu küçük işaretler, elinizdeki dizenin hangi çeşide ait olduğunu daha çözmeden tahmin etmenizi sağlar ve gereksiz deneme yanılmayı önler.

Kubernetes secret'ları, Base64'ün koruma sanılmasının en bilinen örneğidir. Bir Secret manifestindeki değerler yalnızca kodlanmıştır; manifesti okuyabilen herkes sırrı da okuyabilir. Onları asıl koruyan şey, diskte şifreleme ve küme üzerindeki erişim denetimidir. Aynı yanılgı, ortam değişkenlerini ya da yapılandırma yedeklerini Base64'e çevirip güvenli saymakta da tekrarlanır.

Komut satırında ve kodda Base64

Kodlama ve çözme
# Linux / macOS
printf '%s' 'Hello' | base64          # SGVsbG8=
printf '%s' 'SGVsbG8=' | base64 --decode

# JavaScript (UTF-8 safe)
btoa(String.fromCharCode(...new TextEncoder().encode('Grüße')))

# Python
python3 -c "import base64; print(base64.urlsafe_b64encode(b'Hello').decode())"

Çoğu dil Base64'ü standart kütüphanesinde sunar; bu yüzden onu kendiniz yazmanız için nadiren bir neden vardır. Bir fonksiyonun hangi çeşidi ürettiğine dikkat edin: birçok kütüphanede standart ve URL güvenli Base64 için ayrı fonksiyonlar bulunur, bazıları da dolguyu farklı ekler ya da kaldırır. İki sistem bir değer üzerinde anlaşamıyorsa önce çeşidi ve dolguyu karşılaştırın. Bunun en hızlı yolu, aynı girdiyi her iki tarafta kodlayıp çıktıları karakter karakter yan yana koymaktır.

Tarayıcıdaki btoa yalnızca Latin-1 dizelerle çalışır ve başka karakterlerde hata fırlatır; örnekte metnin önce UTF-8 baytlarına çevrilmesinin nedeni budur. Satır sonları da ayrı bir tuzaktır: bazı araçlar MIME'ın gerektirdiği gibi Base64 çıktısını 76 karakterde satırlara böler, bazı çözücüler ise bu satır sonlarını kabul etmez. Kendi kodunuzda dizeyi çözmeden önce boşlukları ve satır sonlarını temizlemek, bu iki dünyayı uzlaştırmanın en basit yoludur.

Çözme hatalarını gidermek

Çözme neden başarısız olur
BelirtiNedenÇözüm
Geçersiz karakterStandart bir çözücüye verilen Base64url girdisi ya da araya karışmış boşluklarURL güvenli seçeneğini işaretleyin ya da - ve _ karakterlerini + ve / ile değiştirin
Geçersiz uzunlukDolgu kaldırılmışUzunluk 4'ün katı olana kadar = ekleyin ya da URL güvenli modu kullanın
Okunamayan çıktıVeri ikili (görsel, sıkıştırılmış, şifrelenmiş)Baytları metin olarak okumak yerine bir dosyaya kaydedin
Şapkalı harfler yanlış çıkıyorMetin başka bir karakter kümesiyle kodlanmışÖzgün kodlamayla çözün ya da UTF-8 olarak yeniden kodlayın
Başta fazladan karakterlerdata:image/png;base64, gibi bir data URI önekiVirgüle kadar olan her şeyi, virgül dâhil, kaldırın

JWT'ler için bunun yerine JWT Çözücü aracını kullanın; bu araç token'ı bölümlerine ayırır ve her bölümü Base64url olarak çözer. URL'lerdeki değerler için URL Kodlayıcı aracı, https://www.example.com/?token= adresindeki bir sorgu dizesinden + işareti geçtiğinde ortaya çıkan %2B gibi yüzde kodlamalarını halleder. İkisini birlikte kullanmak, bir token'ın taşıma sırasında mı yoksa içeriğinde mi bozulduğunu ayırt etmenizi sağlar.

SSS

Base64 bir şifreleme midir?

Hayır. Anahtarsız, geri döndürülebilir bir kodlamadır. Herkes çözebilir.

Base64 çıktısı neden girdiden uzun?

Her 3 bayt 4 karaktere dönüşür; bu yüzden boyut yaklaşık üçte bir artar, üstüne bir de dolgu eklenir.

Sondaki = işaretleri nedir?

Uzunluğu 4'ün katı yapan dolgudur. Tek bir = son grubun iki bayt olduğunu, == ise bir bayt olduğunu gösterir.

Base64url nedir?

+ ve / yerine - ve _ kullanan, dolguyu genellikle atlayan bir çeşittir; böylece değerler kaçırmaya gerek kalmadan URL'lerde ve dosya adlarında kullanılabilir.

Araç emojileri ve şapkalı harfleri destekliyor mu?

Evet. Metin Base64'ten önce UTF-8 olarak kodlanır, çözme sırasında da UTF-8 olarak geri okunur.

Girdim bir yere yükleniyor mu?

Hayır. Kodlama ve çözme tarayıcınızda gerçekleşir.

Bir görseli çözebilir miyim?

Araç metin sonuçları gösterir. İkiliye çözülen Base64 ikili olarak bildirilir; böyle bir veriyi görmek için komut satırı aracıyla bir dosyaya kaydedin.

Çözülen metnimde neden tuhaf karakterler var?

Özgün metin büyük ihtimalle farklı bir karakter kodlamasındaydı ya da veri ikili. Nasıl üretildiğini kontrol edin.

Base32 ya da onaltılık, Base64'ten daha mı iyi?

Boyutu okunabilirlikle takas ederler. Onaltılık boyutu iki katına çıkarır ama basittir ve büyük küçük harf ayrımı yoktur; Base32 karıştırılabilen karakterlerden ve harf boyu sorunlarından kaçınır; Base64 ise üçünün en derli toplusudur.

Bazı Base64 dizelerinde neden satır sonları var?

MIME e-postası Base64'ü satır başına 76 karakterde böler. Tek satır bekleyen araçlarla çözmeden önce satır sonlarını kaldırın.

Görselleri Base64 data URI olarak gömmeli miyim?

Yalnızca çok küçük olanları. Base64 boyutu üçte bir artırır ve ayrı önbelleklemeyi engeller; küçük bir simgeden büyük her şey için normal görsel dosyaları daha iyidir.

Kaynaklar