Base64 nedir?
Base64, veriyi metin için kurulmuş bir kanaldan geçebilsin diye altmış dört okunabilir karakter kullanarak baytları yeniden yazar: bir e-posta gövdesi, bir JSON dizgisi, bir XML özniteliği, bir URL. Her üç bayt dört karaktere dönüşür, adın kaynağı da budur — alfabe altmış dört sembol içerir ve her biri tam olarak altı bit taşır.
Bu bir taşıma kodlamasıdır, bir güvenlik önlemi değil ve bir sıkıştırma adımı değil. Çıktı girdiden kabaca üçte bir daha büyüktür ve dizgiye sahip olan herkes onu doğrudan geri çevirebilir. Verinin değiştirilip değiştirilmediğini bilmek istiyorsanız bu bir özettir (Özet Oluşturucu); gizli kalmasını istiyorsanız bu şifrelemedir. Base64 ikisini de yapmaz.
Hatırlanması gereken tek sayı: üç girdi baytı dört çıktı karaktere dönüşür. Bu sayfadaki diğer her şey bundan çıkar. Dört karakter yirmi dört bit taşır ve yirmi dört bit tam olarak üç bayttır, bu yüzden hiçbir veri kaybolmaz veya uydurulmaz — yalnızca en sonda, girdi son üçlü grubu doldurmadığında hariç.
Bu sayfanın kullanabileceği beş alfabe
İlk iki satır standartlar, son üçü Unix çevresinde gelişmiş geleneklerdir. Beşi de karakter başına aynı altı biti taşır ve yalnızca hangi altmış dört karakterin bu işi yaptığında farklılık gösterirler, bu yüzden aynı bayt beş farklı dizgiye dönüşür. Bir dizginin içinde hangi alfabenin onu ürettiğini söyleyen bir şey yoktur; bu yüzden alfabe seçicisi varsayılan olarak standarttır ve URL-güvenli onay kutusu ikinci satır için bir kısayoldur.
Sayfa bir adayı nasıl seçer: seçici iki yön için de varsayılandır. Çözerken sağdaki panel dizgiyi kendisi de okur — - ve _ yalnızca URL-güvenli alfabeden gelebilir, + veya / yalnızca standart alfabeden gelebilir ve başa yakın bir / veya . iki Unix alfabesine işaret eder. Mevcut girdiyi okuyabilen her alfabe, her birinin aday olup olmadığının nedeniyle birlikte orada listelenir.
Satır sarma: 76 ve 64 karakter
MIME, hiçbir satırın makul olmayacak kadar uzamadığı Base64 istedi ve CRLF ile ayrılmış satır başına 76 karakterde karar kıldı. Sertifikaları ve anahtarları saran PEM dosyaları 64 kullanır. Satır sonları verinin parçası değildir: bir kod çözücü, başka bir şey yapmadan önce onları kaldırır ve satırları yeniden birleştirir, bu yüzden sarılmış ve sarılmamış bir dizgi tam olarak aynı baytlara çözülür. Son satır dışındaki her satır tam sayıda dört karakterlik grup taşır ve bu da yeniden birleştirmeyi güvenli kılan şeydir.
Bu sayfa bir genişlik seçmediğiniz sürece çıktıyı tek satırda bırakır ve kod çözücü satır sonlarıyla veya onlarsız girdiyi kabul eder. Bu sayfanın yazdığı satır sonları düz satır beslemeleridir, bu bir metin kutusunun tutabileceği türdendir; MIME posta gövdeleri geleneksel olarak her satır beslemesinden önce bir satır başı kullanır ve kullanımdaki her kod çözücü ikisini de kabul eder.
Dolgu ve neden kaldırılabilir
Girdi üçün katı olmayan bayt sayısında olduğunda son dört karakterlik grup eksik kalır ve bir veya iki = karakteri onu tamamlar. Hiçbir veri taşımazlar: yalnızca dört karakterden kaçının gerçek olduğunu söylerler. Bir kod çözücü bunu uzunluktan kendisi hesaplayabilir, bu yüzden URL-güvenli Base64 geleneksel olarak dolguyu bırakır — bir = bir URL'de veya bir dosya adında garip durur ve bazı sistemler onu yüzde kodlar.
Seçenekler satırındaki onay kutusu URL-güvenli alfabe seçildiğinde dolguyu korur. Başka bir şey değişmez; veri taşıyan karakterler her iki durumda da aynıdır.
Yaygın yanlış anlamalar
- "Base64 veriyi gizler." Gizlemez. Anahtarı olmayan bir yer değiştirmedir ve bütün amaç herhangi bir okuyucunun bunu geri çevirebilmesidir. Bir parolayı veya bir belirteci Base64'e sarmak, kimin okuyabileceğini hiçbir şekilde değiştirmez.
- "Base64 sıkıştırır." Tersi: her üç girdi baytı dört çıktı karaktere dönüşür, bu yüzden metin taşıdığı veriden üçte bir daha büyüktür.
- "Satır sonları değerin parçasıdır." Sunumdur. Onları eklemek veya kaldırmak, geri çıkan baytları asla değiştirmez.
- "URL-güvenli farklı bir kodlama demektir." İki karakteri değiştirilmiş aynı kodlamadır:
+ - olur ve / _ olur, bu yüzden dizgi escape edilmeden bir URL yolunda veya bir sorgu değerinde durabilir. - "Çözülen bir dizgi geçerli Base64 olmak zorundadır." Alfabe karakterlerinden oluşan her dizgi geçerli Base64'tür, çünkü altı bitlik değerlerin her kombinasyonu geçerli bir bayt dizisidir. Bir dizgi yalnızca bir sonraki adımda, bu baytlar olması gereken biçime karşı denetlendiğinde yanlış çıkar.
- "Dolgu hangi alfabenin kullanıldığını söyler." Söylemez ve çoğu durumda karakterler de söylemez: standart ve URL-güvenli alfabeler altmış dört sembollerinin altmış ikisinde anlaşır, bu yüzden kısa bir dizgi genellikle her ikisinde de aynı okunur.
Akla gelen sorular
Bir Base64 dizgisi neden bazen tek = ile, bazen de iki tane ile biter? Tek olması son grubun üç gerçek karakter taşıdığı anlamına gelir, bu da iki girdi baytı demektir; iki olması ise iki karakter taşıdığı, yani bir girdi baytı demektir. Hiç = olmaması girdi uzunluğunun üçün katı olduğu anlamına gelir.
Base64 rastgele ikili dosyaları temsil edebilir mi? Evet ve ana kullanımı budur. Bu sayfa girdiyi UTF-8 metni olarak ele alır; metin olmayan bir şeyi kodlamak istediğinizde özel Dosyadan Base64'e aracı ham baytları okur.
Bir API'de hangi alfabeyi kullanmalıyım? Alıcı tarafın belgelediği her ne ise. URL-güvenli diyorsa onu kullanın; hiçbir şey demiyorsa ve değer bir URL'nin içinde taşınıyorsa, dolgusu kaldırılmış URL-güvenli güvenli seçimdir.
Çıktı büyük-küçük harfe duyarlı mı? Tamamen. a ve A farklı değerlerdir; bu yüzden Base64, yanlış yazılmış bir karakteri Base32 veya Crockford Base32'nin yaptığı kadar zarif biçimde atlatamaz.