Skip to main content

Hoe Base64-codering werkt

phpMussel CLI Mode (April 2025)

phpMussel CLI Mode (April 2025)
Anonim

Als internet de informatiesnelweg is, is het pad voor e-mail een smal ravijn. Alleen zeer kleine karren kunnen passeren.

Het transportsysteem van e-mail is alleen ontworpen voor gewone ASCII-tekst. Proberen om tekst in andere talen of willekeurige bestanden te verzenden, is als het krijgen van een vrachtwagen door het ravijn.

Hoe gaat de Big Truck door de Ravine?

Hoe stuur je dan een grote vrachtwagen door een klein ravijn? Je moet het aan het ene uiteinde aan stukken maken, de stukjes door het ravijn transporteren en de truck uit de stukken aan het andere uiteinde herbouwen.

Hetzelfde gebeurt wanneer u een bestandsbijlage via e-mail verzendt. In een proces dat bekend staat als codering, worden de binaire gegevens omgezet in ASCII-tekst, die zonder problemen in e-mail kan worden getransporteerd. Aan het einde van de ontvanger worden de gegevens gedecodeerd en wordt het oorspronkelijke bestand opnieuw opgebouwd.

Een methode voor het coderen van willekeurige gegevens als gewone ASCII-tekst is Base64. Het is een van de technieken die door de MIME-standaard worden gebruikt om andere gegevens dan tekst zonder opmaak te verzenden.

Base64 naar de redding

Base64-codering neemt drie bytes, elk bestaande uit acht bits, en vertegenwoordigt ze als vier afdrukbare tekens in de ASCII-standaard. Het doet dat in in wezen twee stappen.

De eerste stap is om drie bytes te converteren naar vier nummers van zes bits. Elk teken in de ASCII-standaard bestaat uit zeven bits. Base64 gebruikt slechts 6 bits (overeenkomend met 2 ^ 6 = 64 tekens) om ervoor te zorgen dat gecodeerde gegevens kunnen worden afgedrukt en menselijk leesbaar zijn. Geen van de speciale tekens die beschikbaar zijn in ASCII worden gebruikt.

De 64 tekens (vandaar de naam Base64) zijn 10 cijfers, 26 kleine letters, 26 hoofdletters en ook '+' en '/'.

Als de drie bytes bijvoorbeeld 155, 162 en 233 zijn, is de corresponderende (en beangstende) bitstroom 100110111010001011101001, die op zijn beurt overeenkomt met de 6-bitwaarden 38, 58, 11 en 41.

Deze getallen worden geconverteerd naar ASCII-tekens in de tweede stap met behulp van de Base64-coderingstabel. De 6-bits waarden van ons voorbeeld vertalen naar de ASCII-reeks "m6Lp".

  • 155 -> 10011011
  • 162 -> 10100010
  • 233 -> 11101001
  • 100110 -> 38
  • 111010 -> 58
  • 001011 -> 11
  • 101001 -> 41
  • 38 -> m
  • 58 -> 6
  • 11 -> L
  • 41 -> p

Dit proces in twee stappen wordt toegepast op de hele reeks bytes die zijn gecodeerd. Om ervoor te zorgen dat de gecodeerde gegevens correct kunnen worden afgedrukt en de lijnlengtegrens van een mailserver niet overschrijden, worden nieuwe lijntekens ingevoegd om lijnlengten onder de 76 tekens te houden. De tekens van de nieuwe regel zijn gecodeerd zoals alle andere gegevens.

Het eindspel oplossen

Aan het einde van het coderingsproces kunnen we een probleem tegenkomen. Als de grootte van de originele gegevens in bytes een veelvoud van drie is, werkt alles goed. Als dat niet het geval is, kunnen we eindigen met een of twee 8-bits bytes. Voor de juiste codering hebben we echter precies drie bytes nodig.

De oplossing is om voldoende bytes toe te voegen met een waarde van '0' om een ​​3-byte groep te maken. Twee van dergelijke waarden worden toegevoegd als we één extra byte aan gegevens hebben, één is toegevoegd voor twee extra bytes.

Natuurlijk kunnen deze kunstmatige achterliggende '0's niet worden gecodeerd met behulp van de onderstaande coderingstabel. Ze moeten worden weergegeven door een 65e karakter.

Het opvulkarakter van Base64 is '='. Uiteraard kan het alleen verschijnen aan het einde van gecodeerde gegevens.

Base64-coderingstabel

Waardeverkolen Waardeverkolen Waardeverkolen Waardeverkolen
0EEN 16Q 32g 48w
1B 17R 33h 49X
2C 18S 34ik 50Y
3D 19T 35j 51z
4E 20U 36k 520
5F 21V 37l 531
6G 22w 38m 542
7H 23X 39n 553
8ik 24Y 40O 564
9J 25Z 41p 575
10K 26een 42q 586
11L 27b 43r 597
12M 28c 44s 608
13N 29d 45t 619
14O 30e 46u 62+
15P 31f 47v 63/