Bu üç isim, ilgili ikili-metin şemalarını tanımlar, ancak farklı kısıtlamalara hizmet ederler. Base64 ve Base64URL altı bitlik gruplar kullanır. Base32 standardı beş bitlik gruplar ve daha küçük bir alfabe kullanır. Doğru seçim, taşıma, depolama ve alım uygulamanızın tam olarak koruyabileceği seçimdir.
Alfabeleri uzunluklardan önce karşılaştırın
Standart Base64 büyük ve küçük harfler, rakamlar, artı ve eğik çizgi kullanır. Base64URL son iki karakterin yerine tire ve alt çizgiyi koyar. Her ikisi de büyük/küçük harfe duyarlıdır. Standart RFC Base32 büyük harf A–Z'yi ve 2–7 arasındaki rakamları kullanır. Bir kod çözücü kolaylık sağlamak amacıyla küçük harf kabul edebilir, ancak bir protokol buna izin verilip verilmediğini belirtmeli ve kanonik çıktısını tanımlamalıdır.
Büyük/küçük harfe duyarlı olmayan bir kanal, uygun şekilde belirtilen Base32 değerini korurken Base64 değerini yok edebilir. URL belirtecinin, telefon üzerinden yüksek sesle okunan koddan farklı kısıtlamaları vardır. Yalnızca bir numunenin ne kadar kısa göründüğüne göre seçim yapmayın.
Boyut değişimini anlayın
Son kısmi grubu göz ardı edersek, Base64'nin bayt başına yaklaşık 1,33 karaktere ihtiyacı vardır ve Base32'nin 1,6'ya ihtiyacı vardır. Standart dolgulu Base32 beş bayt için sekiz karakterli gruplar yayar. F harfini içeren bir bayt için ortak vektörler şunlardır: Zg== Base64 içinde ve MY====== Base32 içinde. Küçük girdiler dolgu yükünü abartır, bu nedenle gerçekçi yük uzunluklarını karşılaştırın.
Payload bytes: 66 (ASCII f)
Base64: Zg==
Base64URL: Zg== (or Zg when the protocol omits padding)
RFC Base32: MY======
Base32 çeşitlerini karıştırmayın
Crockford Base32 insan tarafından okunabilen tanımlayıcılar etrafında tasarlanmıştır ve RFC Base32'den farklı bir alfabe ve belirsizlik kuralları kullanır. Base32hex de farklıdır. Bir değişken tarafından üretilen değer körü körüne başka bir kod çözücüye devredilemez. Belgelerinizde değişkeni, alfabeyi, dolgu ilkesini ve sağlama toplamı davranışını adlandırın.
Kodlama ayrıca kimlik doğrulama sağlamaz. Yanlış yazılmış bir değer sözdizimsel olarak hala geçerli olabilir ve kodu farklı baytlara çözülebilir. Kullanıcılar bir kodu yazıya döküyorsa, alfabenin her hatayı yakaladığını varsaymak yerine, protokol tanımlı bir sağlama toplamı veya doğrulama adımını düşünün.
Sözleşmenin tamamını yazın
İlgili olduğu yerde giriş bayt sırasını, boş giriş davranışını, baştaki sıfırın korunmasını, maksimum uzunluğu, boşluk kabulünü ve geçersiz karakter işlemeyi belirtin. Yüksek değerli baytlara ve kısmi gruplara sahip test vektörlerini ekleyin. Seçtiğiniz kodlayıcıyı ve kod çözücüyü yalnızca birbirlerine karşı değil, bu vektörlere karşı bağımsız olarak kullanın; Aksi halde eşleşen böcekler bir gidiş-dönüşten geçiyormuş gibi görünebilir. Standart formlar ve referans vektörleri RFC 4648.