Tuesday, March 15, 2016

Base64 (Taban 64) Kodlama - Base64 Encoding

Base64 kodlamanın RFC 4648'de kullanım amaçları anlatılmaktadır. Burada bahsedildiği gibi Base64 kodlamanın asıl kullanım amacı byte dizisi şeklindeki verinin yazı (text) biçiminde veri iletim ortamında değiştirilmeden iletilmesi veya ilgili protokollerle uyumlu bir şekilde iletilmesidir. Ayrıca iletim ortamında veri iletiminin ortak bir standarta dayalı yapılmasıyla verinin üzerinden geçtiği cihazlar tarafından aynı şekilde yorumlanması sağlanmaktadır. Base64 kodlamada byte dizisi ASCII kodlarıyla uyumlu 64 tabanında yazıya dönüştürülmektedir. Genellikle yazı tabanlı HTTP, SMTP veya XML gibi yapılarda kullanılır. Base64 kodlama yapılırken sayıların karakter karşılıklarıyla eşleştirilmesi için aşağıdaki tablo (Karakter Set - Character Set) kullanılır:

    Value Encoding  Value Encoding  Value Encoding  Value Encoding
         0 A            17 R            34 i            51 z
         1 B            18 S            35 j            52 0
         2 C            19 T            36 k            53 1
         3 D            20 U            37 l            54 2
         4 E            21 V            38 m            55 3
         5 F            22 W            39 n            56 4
         6 G            23 X            40 o            57 5
         7 H            24 Y            41 p            58 6
         8 I            25 Z            42 q            59 7
         9 J            26 a            43 r            60 8
        10 K            27 b            44 s            61 9
        11 L            28 c            45 t            62 +
        12 M            29 d            46 u            63 /
        13 N            30 e            47 v
        14 O            31 f            48 w         (pad) =
        15 P            32 g            49 x
        16 Q            33 h            50 y

Kodlama yapılırken wikipedia'da gösterildiği gibi byte dizisi 6'lılar şeklinde ayrılarak tablodaki karşılıkları bulunur. 24 bit bloklar kullanılarak kodlama yapılır. 24 bitlik blok içinde karşılığı olmayan kısımlar "pad" karakteri (=) ile gösterilir:

Text contentM
ASCII77 (0x4d)0 (0x00)0 (0x00)
Bit pattern010011010000000000000000
Index191600
Base64-encodedTQ==

Yukarıdaki örnekte ASCII kodlanmış yazının dönüştürülmesi gösterilmesine rağmen ilgili işlem diğer kodlamalar içinde aynıdır (UTF-8, UTF-16 vb.). Fakat herhangi bir yazı bu şekilde gönderilecek ise yazının nasıl kodlandığı da ayrıca verinin yanında gönderilmelidir. Base64 kodlamanın yanında 40 bitlik bloklar ile kodlama yapan Base32 kodlama insan tarafından daha okunabilir bir çıktı üretmesine rağmen Base64 kodlama daha yaygın olarak kullanılmaktadır.

Javascript'te btoa(str) fonksiyonu kullanılarak Base64 kodlama ile kodlanmış yazı elde edilirken atop(enc) ile tekrar orjinal veri elde edilebilmekedir (ie > 9).

function Base64ExampleFunction() {

            var str = "M";
            var enc = window.btoa(str);
            var dec = window.atob(enc);

            var res = "Encoded String: " + enc + "
" + "Decoded String: " + dec;
            document.getElementById("base64Div").innerHTML = res;
        }

Yukarıdaki örnek çalıştırıldığında aşağıdaki sonuç elde edilmektedir:


No comments:

Post a Comment