Temel32 - Base32

Base32 , taban -32 sayı sistemidir . Her biri 5 bit (2 5 ) ile temsil edilebilen 32 basamaktan oluşan bir set kullanır . Base32 sayılarını insan tarafından okunabilir bir şekilde temsil etmenin bir yolu, yirmi iki büyük harf A–V ve 0-9 rakamları gibi standart bir 32 karakterlik küme kullanmaktır. Bununla birlikte, birçok başka varyasyon farklı bağlamlarda kullanılmaktadır.

Bu, daha önce açıklanan 32 karakter kümesi kullanılarak temsil edilen bir Base32 numarası örneğidir ( Base32 büyük harf kodlamasında IPFS CIDv1):BAFYBEICZSSCDSBS7FFQZ55ASQDF3SMV6KLCW3GOFSZVWLYARCI47BGF354

Avantajlar

Base32 üzerinde bir çok avantaj vardır Base64 :

  1. Ortaya çıkan karakter kümesi , büyük/küçük harfe duyarsız bir dosya sistemi , DNS adları, konuşulan dil veya insan belleği kullanırken genellikle yararlı olabilecek tek bir durumdur .
  2. Sonuç bir dosya adı olarak kullanılabilir, çünkü muhtemelen Unix yol ayırıcısı olan '/' sembolünü içeremez .
  3. Alfabe, benzer görünen farklı sembol çiftlerinden kaçınmak için seçilebilir, böylece dizeler elle doğru bir şekilde kopyalanabilir. (Örneğin, RFC  4648 sembol seti bir, sekiz ve sıfır rakamlarını atlar, çünkü bunlar 'I', 'B' ve 'O' harfleriyle karıştırılabilir.)
  4. Bir sonuç hariç dolgu bir eklenebilir URL'ye olmadan kodlayan herhangi bir karakter.

Base32 ayrıca onaltılık / Base16'ya göre avantajlara sahiptir :

  1. Base32 temsili kabaca %20 daha az yer kaplar. (1000 bit 200 karakter alır, Base16 için 250 karakter alır).

Dezavantajları

Base32 gösterimi daha kabaca% 20 daha fazla yer alır Base64 . Ayrıca, 5 baytı 8 karaktere (3 bayt ila 4 karakter yerine) kodladığından, 8 karakterlik bir sınıra doldurma, kısa mesajlar için daha büyük bir yüktür.

İkili verilerin yüzdesi olarak Base64 ve Base32 notasyonlarının uzunluğu
Base64 Base32
8 bit %133 %160
7 bit %117 140%

RFC 4648 Base32 alfabesi

En yaygın olarak kullanılan Base32 alfabe tanımlanan RFC  4648 . AZ alfabesini ve ardından 27 alfabesini kullanır . O ve I harfleriyle benzerlikleri nedeniyle 0 ve 1 atlanır (böylece "2" aslında 26 ondalık değerine sahiptir ).

Bazı durumlarda dolgu gerekli değildir veya kullanılmaz (dolgu, modulo 8 dizisinin uzunluğundan çıkarılabilir). RFC 4648, RFC'ye atıfta bulunan standardın belirtimi açıkça aksini belirtmediği sürece dolgu kullanılması gerektiğini belirtir. Doldurma karakterinin sorun oluşturabileceği URL belirteçlerinde veya dosya adlarında base32 kodlu verileri kullanırken dolguyu hariç tutmak yararlıdır.

RFC 4648 Base 32 alfabesi
Değer Sembol Değer Sembol Değer Sembol Değer Sembol
0 A 8 ben 16 Q 24 Y
1 B 9 J 17 r 25 Z
2 C 10 K 18 S 26 2
3 NS 11 L 19 T 27 3
4 E 12 m 20 sen 28 4
5 F 13 n 21 V 29 5
6 G 14 Ö 22 W 30 6
7 H 15 P 23 x 31 7
dolgu malzemesi =

Alternatif versiyonlar

Base32 alfabesini değiştirerek, tüm alternatif standartlar benzer alfasayısal sembol kombinasyonlarına sahiptir.

z-tabanı-32

z-base-32, Zooko Wilcox-O'Hearn tarafından insan kullanımı için daha kolay ve daha kompakt olacak şekilde tasarlanmış bir Base32 kodlamasıdır . Bu içerir 1 , 8 ve 9 , ancak hariç l , v ve 2 . Ayrıca alfabeye izin verir, böylece daha kolay karakterler daha sık ortaya çıkar. Bit uzunluğu 8'in katı olmayan bit dizilerini kompakt bir şekilde kodlar ve sondaki dolgu karakterlerini atlar. Z-baz-32 kullanılmıştır Mnet açık kaynak projesi, şu anda kullanılan Phil Zimmermann sitesindeki ZRTP protokolü ve Tahoe-LAFS açık kaynak projesi.

z-taban-32 alfabesi
Değer Sembol Değer Sembol Değer Sembol Değer Sembol
0 y 8 e 16 Ö 24 a
1 B 9 J 17 T 25 3
2 n 10 k 18 1 26 4
3 NS 11 m 19 sen 27 5
4 r 12 C 20 w 28 H
5 F 13 P 21 ben 29 7
6 G 14 Q 22 s 30 6
7 8 15 x 23 z 31 9

Crockford's Base32

Base32 için başka bir alternatif tasarım , mod-37 sağlama toplamı için ek karakterler kullanmayı öneren Douglas Crockford tarafından yaratılmıştır . Rakamlarla karışıklığı önlemek için I, L ve O harflerini hariç tutar. Ayrıca, kazara müstehcenlik olasılığını azaltmak için U harfini hariç tutar.

Crockford's Base32'de ikili verileri kodlamak için kütüphaneler çeşitli dillerde mevcuttur.

Crockford'un Base32 alfabesi
Değer Rakam Kodla Basamak Kodunu Çöz Değer Rakam Kodla Basamak Kodunu Çöz
0 0 0 o O 16 G İyi oyun
1 1 1 ben ben l L 17 H hH
2 2 2 18 J jJ
3 3 3 19 K kK
4 4 4 20 m m M
5 5 5 21 n n N
6 6 6 22 P p P
7 7 7 23 Q q Q
8 8 8 24 r r R
9 9 9 25 S s S
10 A bir 26 T t T
11 B bB 27 V v V
12 C c C 28 W wW
13 NS gün 29 x x X
14 E e E 30 Y yy
15 F fF 31 Z z Z

elektrolojik

Makine adreslerini temsil etmek için Electrologica X1 üzerinde çalışan programcılar tarafından 32 tabanlı gösterimin daha önceki bir biçimi kullanılıyordu . "Rakamlar" 0'dan 31'e kadar ondalık sayılar olarak temsil edildi. Örneğin, 12-16 , makine adresi 400'ü (= 12*32 + 16) temsil eder .

base32hex

Triacontakaidecimal uzanır Base 32, başka bir alternatif tasarım onaltılık daha doğal bir şekilde ve ilk Hıristiyan Lanctot, çalışan bir programcı tarafından önerilmiştir Adaçayı yazılımı yazdığı bir mektupta, Dr Dobb'un çözümü için önerilen bir çözüm olarak Mart 1999 yılında dergisi Y2K hatası ve "Double Hex" olarak anılır. Bu sürüm, RFC  2938'de "Base-32" adı altında açıklanmıştır . RFC 4648, bu sürümün NSEC3'te mevcut kullanımını kabul ederken, buna base32hex olarak atıfta bulunur ve "base32" olarak etiketlemeyi önermez.

Onaltılı sisteme benzer şekilde, kullanılan rakamlar 0-9 ve ardından alfabenin ardışık harfleridir. Bu, 10'dan büyük bir taban (16 veya 32 gibi) belirtildiğinde JavaScript parseInt() işlevi ve Python int() yapıcısı tarafından kullanılan rakamlarla eşleşir . Ayrıca, RFC 4648'in base-32 veya base-64'ünün aksine, temsil edilen verilerin bit düzeyinde sıralama düzenini koruma onaltılı özelliğini de korur.

Diğer birçok 32 tabanlı gösterim sisteminin aksine, triacontakaidecimal bitişiktir ve görsel olarak çakışabilecek karakterler içerir. Doğru yazı tipi ile 0, O ve 1, I arasında görsel olarak ayrım yapmak mümkündür. Diğer yazı tipleri uygun değildir çünkü İngilizce'nin sağladığı bağlam, sayıları ifade eden bir gösterim sistemi tarafından sağlanmamaktadır. Ancak, yazı tipi seçimi gösterim veya kodlama ile kontrol edilmez, bu nedenle ayırt edilebilir bir yazı tipinin kullanılacağını varsaymak risklidir.

"Genişletilmiş Hex" Taban 32 Alfabesi
Değer Sembol Değer Sembol Değer Sembol Değer Sembol
0 0 9 9 18 ben 27 r
1 1 10 A 19 J 28 S
2 2 11 B 20 K 29 T
3 3 12 C 21 L 30 sen
4 4 13 NS 22 m 31 V
5 5 14 E 23 n
6 6 15 F 24 Ö
7 7 16 G 25 P
8 8 17 H 26 Q ped =

jeohash

Enlem ve boylam değerlerini bir (bit geçmeli) pozitif tamsayıda temsil etmek için kullanılan Geohash algoritmasına bakın . Geohash'in base32 gösterimi, aşağıdaki karakter haritasında gösterildiği gibi, "a", "i", "l", "o" harfleri hariç tüm ondalık basamakları (0-9) ve neredeyse tüm küçük harf alfabesini kullanır:

Ondalık 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Taban 32 0 1 2 3 4 5 6 7 8 9 B C NS e F G
 
Ondalık 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Taban 32 H J k m n P Q r s T sen v w x y z

Video oyunları

NVRAM evrensel hale gelmeden önce , Nintendo platformları için bazı video oyunları parolalar için taban 31 numaralarını kullanıyordu . Bu sistemler, oyunun yanlışlıkla saygısız bir parola vermesini önlemek için sesli harfleri (Y hariç) atlar . Bu nedenle, karakterler genellikle aşağıdaki kümenin bazı küçük varyasyonlarıdır: 0–9, B, C, D, F, G, H, J, K, L, M, N, P, Q, R, S, T, V, W, X, Y, Z ve bazı noktalama işaretleri. Böyle bir sistemi kullandığı bilinen oyunlar arasında Mario Is Missing! , Mario'nun Zaman Makinesi , Tetris Patlaması ve Yüzüklerin Efendisi (Süper NES) .

Kelime güvenli alfabe

Word güvenli Base32 alfabesi, Open Location Code Base20 alfabesinin bir uzantısıdır . Bu alfabe, yanlışlıkla sözcük oluşturmamak için seçilen 8 sayısal rakam ve 12 büyük/küçük harfe duyarlı olmayan harf kullanır. Alfabeyi büyük/küçük harfe duyarlı olarak ele almak, 32 (8+12+12) basamaklı bir set oluşturur.

Ondalık 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Taban 32 2 3 4 5 6 7 8 9 C F G H J m P Q
 
Ondalık 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Taban 32 r V W x C F G H J m P Q r v w x

Yazılım

Base32, insanlar tarafından rahatlıkla kullanılabilen ve bilgisayarlar tarafından işlenebilen sınırlı bir sembol seti kullanarak rastgele bayt verilerini kodlamaya yönelik bir gösterimdir.

Base32, 32 farklı karakterden oluşan bir sembol setinin yanı sıra 8 bitlik baytlık rastgele dizileri Base32 alfabesine kodlamak için bir algoritmadan oluşur. Her 8 bitlik giriş baytını temsil etmek için birden fazla 5 bitlik Base32 sembolü gerektiğinden, izin verilen Base32 dizi uzunlukları (40 bitin katları olmalıdır) ile ilgili gereksinimleri de belirtir. Buna karşılık, yakından ilişkili Base64 sistemi, 64 sembolden oluşan bir set kullanır.

C/C++, Perl, Java, JavaScript Python, Go ve Ruby'de Base32 uygulamaları mevcuttur.

Ayrıca bakınız

"2'nin Yetkileri" ile ilgili temeller:      Diğer bazlar:      base32 uygulamaları:

Referanslar