SORU
21 AĞUSTOS 2010, CUMARTESİ


Neden Base64 kullanıyoruz?

Wikipedia diyor

Base64 kodlama şemaları ve metinsel veri ile başa çıkmak için tasarlanmış medya üzerinde saklanan transfer olması gereken ikili veri kodlamak için bir ihtiyaç vardır, yaygın olarak kullanılır. Bu veri aktarım sırasında bir değişiklik yapmadan bozulmadan kalmasını sağlamak için.

Ama bu veriler her zaman bizim makineler mağaza ikili var bellek çünkü ikili iletilen/depolanır ve sadece ne kadar bağlı olduğunu siz yorumlayın değil mi? Bit deseni Base64, TWFu sonunda aynı bit deseni saklamak için gidiyor gibi 010011010110000101101110 ASCII Man veya kodlama yani, ister.

alt text

Nihai kodlama sıfırlar ve birler açısından ve her makine ve medya ile anlaşma olursa, nasıl olursa veriler ASCII olarak temsil veya Base64 olduğu fark eder mi?

Bu ne anlama geliyor "metinsel veri ile başa çıkmak için tasarlanmış medya"? = ^ İkili anlaşma yapabilirler . bir şey ile başa çıkabilirim.


Teşekkürler, şimdi anladım sanırım herkes.

Üzerinden veri göndermek, veri gelmek istediğimiz aynı biçimde yorumlanabilir emin olamayız. Bu yüzden, her iki taraf anlamak veriler biçiminde kodlanmış (Base64 gibi) göndeririz. Kodlanmış biçimi kabul ettiler çünkü gönderen ve aynı olayları farklı yorumlayabilir alıcı, ama bile bu şekilde, verileri yanlış yorumlanmış değil.

Mark Byers example

Göndermek istiyorum

Hello
world!

Bir şekilde ASCII gibi göndermektir

72 101 108 108 111 10 119 111 114 108 100 33

Ama byte 10 doğru diğer ucunda bir yeni satır olarak yorumlanabilir değil. Yani, ASCII alt bu şekilde kodlamak için kullanıyoruz

83 71 86 115 98 71 56 115 67 110 100 118 99 109 120 107 73 61 61

hangi mal daha çok veri aktarımı için aynı miktarda bilgi sağlayan alıcı olabilir decode verileri istenen şekilde, hatta eğer alıcı olursa farklı yorumlara geri kalan karakter kümesi.

CEVAP
21 AĞUSTOS 2010, CUMARTESİ


İlk hata, ASCII kodlaması ve Base64 kodlama değiştirilebilir olduğunu düşünüyor. Değildir. Farklı amaçlar için kullanılır.

  • ASCII metin kodlama, metin bir dize ile başlar ve bir bayt dizisi dönüştürmek.
  • Kodlama Base64, veri bayt sırası ile Başlat ve metin bir dize dönüştürmek.

Base64 gerekli olduğunu anlamak için ilk etapta bilgisayar küçük bir hikayeye ihtiyacımız var.


Bilgisayarlar ikili iletişim - 0'lar ve 1'ler, ama insanlar genellikle metin veya resimler gibi daha zengin veri formları ile iletişim kurmak istiyorum. Bilgisayarlar arasında veri aktarmak için önce 0'lar ve 1'ler, gönderdi, sonra tekrar sorunsuz kodlanmış olmalı. Örnek olarak metin almak için - bu kodlama gerçekleştirmek için birçok farklı yolu vardır. Eğer tek bir kodlama üzerinde kabul edersek her şey daha kolay olurdu, ama ne yazık ki bu durum böyle değil.

Aslında farklı kodlamalar çok sonunda ASCII karakter başına 7 bit ile bir standart haline gelene kadar karakter başına bit farklı sayıda kullanılan oluşturulmuştur (Baudot code gibi). Ancak çoğu bilgisayar bayt 8 bit her oluşan ikili veri deposu ASCII veri bu tür tranferring için uygun değildir. Bazı sistemler bile en anlamlı bit temizlemek istiyorsunuz. Ayrıca hat sistemleri arasında kodlamaları biten farkı ASCII karakter 10 ve 13 de bazen değiştirilmiş.

Base64 kodlama bu sorunları çözmek için tanıtıldı. Bu güvenli bozuk almadan göndermek olduğu bilinen bayt (alfasayısal ASCII karakterler ve semboller bir çift) aribtrary bayt kodlamak için sağlar. Dezavantajı mesaj Base64 kodlama kullanarak uzunluğu artar - veri her 3 bayt 4 ASCII karakter kodlanır.

Metin güvenilir bir şekilde göndermek için kullanabilirsinizilkbayt seçtiğiniz bir metin kodlama (örneğin UTF-8) kullanarak kodlamak ve sonradaha sonraBase64 ASCII kodlanmış olarak göndermek için güvenli bir metin dizesi içine çıkan ikili veri kodlamak. Alıcı orijinal iletiyi kurtarmak için bu süreci tersine çevirmek için var. Tabii ki bu alıcı kullanılan bilen gerektirir ve bu bilgiler genellikle ayrı ayrı gönderilmesi gerekiyor.

Tarihsel olarak e-posta sunucu Satır sonları değiştirmek olabilir e-posta mesajları içinde ikili veri kodlamak için kullanılır. Daha modern bir örnek embed image data directly in HTML source code Base64 kodlama kullanın. Burada veri karakterleri gibi önlemek için kodlamak için gereklidir '<' ve '>' etiketleri gibi algılanıyor.


Burada çalışmış bir örnek:

İki satırlık bir metin mesajı göndermek istiyorum

Hello
world!

Eğer ASCII (veya UTF-8) olarak gönderirsem bu gibi görünecektir:

72 101 108 108 111 10 119 111 114 108 100 33

Bayt 10 Base64 dize olarak bu bayt: 64 kodlamak Bankası, böylece bazı sistemleri bozuk

SGVsbG8sCndvcmxkIQ==

Ne zaman kullanarak ASCII kodlanmış olan bu gibi görünüyor:

83 71 86 115 98 71 56 115 67 110 100 118 99 109 120 107 73 61 61

Tüm bayt burada herhangi bir sistem bu ileti, bozuk ihtimali çok var çok güvenli bayt bilinmektedir. Benim orjinal mesajı yerine bu göndermek ve alıcı orijinal iletiyi kurtarmak için süreci tersine edebilirim.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BetterCoder

    BetterCoder

    17 Aralık 2012
  • SHAYTARDS

    SHAYTARDS

    1 EKİM 2008
  • TheDroidDemos

    TheDroidDemo

    15 ŞUBAT 2011