Kodla veya Çöz seçeneğini seçin, bir şema belirleyin ve işlem düğmesine tıklayın. Tüm işlemler tarayıcınızda kalır.
Base32 ve Base58 nedir?
Bunlar tek bir soruya iki yanıttır: metin taşıyan bir kanal bayt taşımaya zorlanır. Base32 ve Base58 şifreleme değildir ve özet almak da değildir — hiçbir şeyi gizlemezler ve hiçbir şeyi kısaltmazlar. Bir bayt dizisini sabit bir okunabilir karakter kümesi kullanarak yeniden yazarlar ve hangi kümenin kullanıldığını bilen herkes onu doğrudan geri çevirebilir. Birini diğerine tercih etmenin tek nedeni, alıcı tarafın karakterlerle ne yaptığıdır.
İki aile bu yeniden yazmayı tamamen farklı yollarla yapar ve aradaki fark bu sayfadaki neredeyse her sürprizi açıklar:
- Bit paketleme — Base32, Base32 Hex, Crockford Base32, z-base-32. Baytlar sabit gruplara kesilir ve her beş bit bir karaktere dönüşür. Çıktı uzunluğu girdi uzunluğundan öngörülebilir; son, kısmen dolu grup ya dolgu karakterleriyle işaretlenir ya da kısa bırakılır.
- Büyük sayı dönüşümü — her Base58 tablosu. Tüm bayt dizisi taban 256'da tek bir devasa sayı olarak okunur ve taban 58'de yeniden yazılır. Grup yoktur, dolgu yoktur; uzunluk hiçbir şeye bölünmez ve her önde gelen sıfır baytı bir önde gelen sıfır sembolüne dönüşür.
Veri taşıyan altı bit nereye gider: Base32 karakter başına beş bit harcar, bu yüzden her beş girdi baytı için sekiz karakter gerekir — yaklaşık %60 daha büyük. Base58 karakter başına yaklaşık 5,86 bit harcar, bu yüzden yaklaşık %37 daha büyük olur. Base64 karakter başına altı bit sığdırır ve %33'te kalır. Daha büyük alfabeler daha kısadır ama yüksek sesle okunması daha zordur; her birinin yaptığı takas tam olarak budur.
Bu sayfadaki yedi alfabe
Her alfabe, açıklanmak yerine tam olarak yazdırılır, çünkü aynı ada farklı karakterler yazdıran iki araç, etiket ne derse desin birbiriyle uyuşmaz. RFC 4648 satırları normatiftir; Crockford ve z-base-32 satırları biçimin yazarının yayımladığını izler; üç Base58 satırı standart değil yaygın geleneklerdir, bu yüzden ayrı listelenirler.
Crockford Base32 ve modulo 37 denetim sembolü
Alfabe, hiçbir sembolün başka biri olarak okunamaması için I, L, O ve U'yu çıkarır. Geriye kalanlar girişte büyük-küçük harf duyarsızdır: i ve l 1 rakamı olarak okunur, o 0 rakamı olarak okunur ve tire yalnızca uzun bir dizgiyi okumayı kolaylaştırmak için vardır. Buna ek olarak biçim isteğe bağlı bir denetim sembolü tanımlar: sembol dizgisinin taban 32 sayı olarak okunan değeri, modulo 37 alınarak ve 32 ila 36 değerleri için beş ek sembolle yazılarak elde edilir.
Denetim sembolü, baytlar üzerinden değil sembol dizgisi üzerinden hesaplanır: kodlayıcı son grubu sıfırla genişlettiği için aynı karakterlerin çözülmesi her zaman aynı değere döner. Bu yüzden tablodaki denetim değeri yalnızca kodlanmış sütundan elle yeniden üretilebilir. Ek beş sembol *, ~, $, = ve U'dur ve sırasıyla 32, 33, 34, 35, 36 değerlerine karşılık gelir; bu yüzden bir denetim sembolü her zaman bir rakam veya harf olmayabilir.
z-base-32
z-base-32, RFC 4648 Base32'nin beş bitlik paketlemesini korur ve yalnızca otuz iki karakterin sırasını değiştirir. Sıra, bir kişinin en sık yazmak zorunda kalacağı karakterlerin en kolay yazılan ve karıştırılması en zor olanlar olacak şekilde seçilmiştir. Dolgusu yoktur, bu yüzden okuyucunun bir değerin kaç sembole sahip olması gerektiğini bilmesi gerekir; önce elle okunmak üzere tasarlanmış bir biçimin bedeli budur.
Base58Check: bir sürüm baytı, yük, dört bayt sağlama toplamı
Base58 tek başına, yanlış yazılmış bir dizgiyi doğru olandan ayırt edecek bir yolu yoktur, çünkü elli sekiz karakterinin neredeyse her kombinasyonu geçerli bir sayıdır. Base58Check bunu verileri bir sarmalayıcının içine koyarak çözer: bir sürüm baytı, ardından yük, sonra ilk iki parçaya arka arkaya iki kez uygulanan SHA-256'nın ilk dört baytı. Alan program bu dört baytı yeniden hesaplar ve farklılarsa dizgiyi reddeder. Sürüm baytı, bir cüzdana bir ödeme adresine, bir betik adresine veya bir özel anahtara bakıp bakmadığını söyler.
Dönüştürücünün altındaki üretici, sürüm baytını ve yükü onaltılık olarak alır ve Base58Check dizgisini yazar; doğrulayıcı bir tanesini okur, dört sağlama baytını ayırır, bunları yeniden hesaplar ve bulduğu ile beklediği değeri bildirir. Buradaki yanlış bir sağlama toplamı dizginin yanlış yazıldığı veya değiştirildiği anlamına gelir — asla yükün yanlış olduğu anlamına gelmez, çünkü yük hiçbir zaman yorumlanmaz.
Yaygın yanlış anlamalar
- "Base64 şifrelemedir." Hayır. Anahtar ve gizli bilgi yoktur; çıktı herkes tarafından tersine çevrilebilir. Base32 ve Base58 aynı konumdadır ve bir değeri üçünün hepsinden geçirmek de bir koruma eklemez.
- "Bir Base58 dizgisi Bitcoin adresidir." Yalnızca Base58Check sağlama toplamını da geçtiğinde ve alıcı yazılımın tanıdığı bir sürüm baytı taşıdığında. Base58 dizgileri, hiç sağlama toplamı olmayan düz tanımlayıcılar da dahil olmak üzere birçok başka yerde görünür.
- "Üç Base58 alfabesi birbirinin yerine kullanılabilir." Aynı elli sekiz karakteri üç farklı sırada kullanırlar, bu yüzden aynı baytlar üç farklı dizgi üretir. Bir araca hangisini kullanacağı söylenmelidir ve bu sayfa her zaman hangisini kullandığını söyler.
- "Dolgu değerin bir parçasıdır."
= karakterleri yalnızca son grubu işaretler. Yalnızca dolgularında farklılık gösteren iki Base32 dizgisi aynı baytları tanımlar; bu yüzden kod çözücü dolgusu kesilmiş bir dizgiyi kabul eder. - "Herhangi bir karakter çalışır." Her alfabe sabit bir kümedir. Dışarıdan bir karakterin değeri yoktur, bu yüzden kod çözücü tahmin yürütmek yerine durur ve karakteri ve konumunu adlandırır.
Akla gelen sorular
Neden Base32 0-9 yerine 2-7 kullanır? Çünkü RFC 4648 alfabeyi bir alan adının içerebileceği karakterlerin içinde kalacak ve yüksek sesle okunması kolay olacak şekilde seçti. Doğal sıralama daha önemli olduğunda bunun yerine Base32 Hex 0-9 A-V kullanır.
Neden bir Base58 dizgisi bu kadar sık 1 ile başlar? Girdinin her önde gelen sıfır baytı bir önde gelen 1 olur (Bitcoin ve Flickr alfabelerinin ilk karakteri). 0x00 sürüm baytı bir sıfır bayttır, bu yüzden çoğu mainnet Bitcoin adresi tam olarak bir 1 ile başlar.
Örnek düğmesi ne yükler? Ekranda şu anda olan şemaya ve yöne ait örneği, asla sabit bir metni değil. Kodlayıcıya şemanın kendi örneğinin metni verilir — Base32 ve Base32 Hex için RFC 4648 bölüm 10 vektörleri, Crockford'un 12345'i, yukarıda yazdırılan z-base-32 satırları — ve kod çözücüye seçili alfabe için kodlanmış dizgi verilir; örneği her iki yönde de kullanılabilir kılan budur. Üç Base58 satırı bilerek aynı metni taşır, bu yüzden şemayı değiştirip Örnek'e yeniden basmak aynı elli sekiz karakterin üç sıralamasını yan yana gösterir. Crockford denetim sembolü işaretliyse kod çözücüye değer sonunda sembolle verilir; doğrulayıcının birini kabul ettiğini izlemenin tek yolu budur.
Sayfa verilerimi bir yere gönderiyor mu? Hayır. Her dönüşüm bu tarayıcı sekmesinde gerçekleşir ve sayfa hiçbir türde ağ çağrısı içermez. Dosyanın doğrudan diskten açılmasıyla da çalışmasının nedeni budur.
Bir gizli bilgi için hangisini kullanmalıyım? TOTP ve HOTP kimlik doğrulayıcı sırları genellikle RFC 4648 alfabesinde Base32'dir, çünkü sırrın elle yazılması gerekir. Alıcı yazılımınızın istediğini kullanın ve gizlilik için asla kodlamanın kendisine güvenmeyin.