Base62 vs Base64: tanımlayıcılar rastgele bayt akışları değildir

Base62 alfabe sırasının ve baştaki sıfır kurallarının neden önemli olduğunu ve Base64URL'nin ne zaman daha iyi bir değişim formatı olduğunu öğrenin.

Base62 genellikle rakamları ve büyük ve küçük harfleri kullanır. Bu, onu noktalama işareti olmayan kompakt tanımlayıcılar için çekici kılmaktadır. Base64 64 sembol kullanır ve bit gruplarını doğrudan paketler. İsimler benzer olsa da Base62 uygulamaları genellikle girişi bir sayı olarak modelliyor ve bu da farklı birlikte çalışabilirlik sorunları yaratıyor.

Alfabe sırası formatın bir parçasıdır

İki Base62 kütüphanesi rakamlar, büyük harfler ve küçük harfler için farklı sıralamalar seçebilir. Aynı görünür dize daha sonra farklı sayıları temsil eder. Kullanan bir sistem 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz küçük harflerin önce gelmesi fikrine katılmıyor. Alfabeyi ve test vektörlerini protokole kaydedin; “Base62” tek başına yeterli değil.

Büyük/küçük harf duyarlılığı da önemlidir. Küçük harfli bir proxy, büyük/küçük harfe duyarlı olmayan bir veritabanı harmanlaması veya manuel olarak normalleştirilmiş bir tanımlayıcı, değerini değiştirebilir. Depolama katmanınız büyük/küçük harf durumunu göz ardı ederse, ne sıradan Base62 ne de Base64 ek bir tasarım kararı olmadan güvenli bir temsil değildir.

Baytları kodlarken uzunluğu koru

Onaltılı sayı içeren iki dosyayı düşünün 01 ve 0001. İşaretsiz tamsayılar olarak yorumlandığında her ikisinin de değeri birdir. Çıplak tamsayıdan Base62'ye dönüştürme, ayrımı kaybeder. Bayt odaklı bir Base62 formatı, açıkça baştaki sıfır işlemeyi veya bir uzunluk alanını gerektirir. Bu özellikle rastgele belirteçler ve sabit uzunluklu kriptografik değerler için geçerlidir.

const a = BigInt('0x01');
const b = BigInt('0x0001');
console.log(a === b); // true: numeric equality loses byte length

Değerin ne anlama geldiğine göre seçim yapın

Bir uygulamanın kontrolü altında bir veritabanı tamsayısını kısaltıyorsanız, belgelenmiş bir Base62 alfabesi uygun olabilir. Bağımsız sistemler arasında rastgele baytlar taşıyorsanız, Base64URL genellikle daha net, standartlaştırılmış bir sözleşme sağlar. Aynı altı bitlik gruplamayı korurken standart Base64 noktalama işaretinin yerine kısa çizgi ve alt çizgiyi kullanır.

Kodlama rastgeleleştirme değildir. Sıralı tamsayılar Base62 dönüşümünden sonra tahmin edilebilir kalır. Tanımlayıcıların tahmin etmeye direnmeleri gerekiyorsa, kriptografik rastgele bir kaynak kullanarak yeterli miktarda öngörülemeyen entropi oluşturun ve ardından elde edilen baytları uzunluk kaybetmeden kodlayın. Kompakt görünümlü bir tokenı, üretiminin güvenli olduğunun kanıtı olarak görmeyin.

Çıktı boyutlarını karşılaştırırken önekleri, doldurma kurallarını ve tüm uzunluk meta verilerini ekleyin. En az bir boş giriş, bir sıfır bayt, baştaki birkaç sıfır ve yüksek değerli bir bayt. Base64URL alfabesi standartlaştırılmıştır. RFC 4648; Base62 uygulamasının ek ayrıntıları kendisinin belirtmesi gerekir.