base64 — Base16, Base32, Base64, Base85 datakodningar

Källkod: Lib/base64.py


Denna modul innehåller funktioner för kodning av binära data till skrivbara ASCII-tecken och avkodning av sådana kodningar tillbaka till binära data. Detta inkluderar -kodningarna som anges i RFC 4648 (Base64, Base32 och Base16) och de icke-standardiserade Base85-kodningarna.

Det finns två gränssnitt i den här modulen. Det moderna gränssnittet stöder kodning av bytesliknande objekt till ASCII bytes, och avkodning av bytesliknande objekt eller strängar som innehåller ASCII till bytes. Båda base-64-alfabeten som definieras i RFC 4648 (normal, URL- och filsystemssäker) stöds.

Gränssnittet legacy stöder inte avkodning från strängar, men det innehåller funktioner för kodning och avkodning till och från filobjekt. Det stöder endast Base64-standardalfabetet och lägger till nya rader var 76:e tecken enligt RFC 2045. Observera att om du letar efter stöd för RFC 2045 bör du förmodligen titta på paketet email istället.

Ändrad i version 3.3: Unicode-strängar som bara innehåller ASCII accepteras nu av avkodningsfunktionerna i det moderna gränssnittet.

Ändrad i version 3.4: Alla bytesliknande objekt accepteras nu av alla kodnings- och avkodningsfunktioner i den här modulen. Stöd för Ascii85/Base85 har lagts till.

RFC 4648-kodningar

Kodningarna RFC 4648 är lämpliga för kodning av binära data så att de kan skickas säkert via e-post, användas som delar av URL:er eller ingå som en del av en HTTP POST-begäran.

base64.b64encode(s, altchars=None)

Kodar bytesliknande objekt s med Base64 och returnerar den kodade bytes.

Det valfria altchars måste vara ett bytesliknande objekt av längd 2 som anger ett alternativt alfabet för tecknen + och /. Detta gör det möjligt för en applikation att t.ex. generera URL- eller filsystemssäkra Base64-strängar. Standardvärdet är None, för vilket standard Base64-alfabetet används.

Kan hävda eller ge upphov till ett ValueError om längden på altchars inte är 2. Ger upphov till ett TypeError om altchars inte är ett bytesliknande objekt.

base64.b64decode(s, altchars=None, validate=False)

Avkodar den Base64-kodade bytesliknande objekt eller ASCII-strängen s och returnerar den avkodade bytes.

Valfri altchars måste vara en bytesliknande objekt eller ASCII-sträng av längd 2 som anger det alternativa alfabet som används i stället för tecknen + och /.

Ett binascii.Error-undantag uppstår om s är felaktigt utfylld.

Om validate är False (standard), kasseras tecken som varken finns i det normala bas-64-alfabetet eller i det alternativa alfabetet före utfyllnadskontrollen. Om validate är True resulterar dessa icke-alfabetiska tecken i indata i ett binascii.Error.

För mer information om den strikta base64-kontrollen, se binascii.a2b_base64()

Kan hävda eller ge upphov till ett ValueError om längden på altchars inte är 2.

base64.standard_b64encode(s)

Kodar bytesliknande objekt s med hjälp av standard Base64-alfabetet och returnerar den kodade bytes.

base64.standard_b64decode(s)

Avkodar bytesliknande objekt eller ASCII-sträng s med hjälp av standard Base64-alfabetet och returnerar den avkodade bytes.

base64.urlsafe_b64encode(s)

Kodar bytesliknande objekt s med det URL- och filsystemssäkra alfabetet, som ersätter - istället för + och _ istället för / i standard Base64-alfabetet, och returnerar den kodade bytes. Resultatet kan fortfarande innehålla =.

base64.urlsafe_b64decode(s)

Avkoda bytesliknande objekt eller ASCII-sträng s med URL- och filsystemssäkert alfabet, som ersätter - istället för + och _ istället för / i standard Base64-alfabetet, och returnera den avkodade bytes.

base64.b32encode(s)

Kodar bytesliknande objekt s med Base32 och returnerar den kodade bytes.

base64.b32decode(s, casefold=False, map01=None)

Avkodar den Base32-kodade bytesliknande objekt eller ASCII-strängen s och returnerar den avkodade bytes.

Valfritt casefold är en flagga som anger om ett alfabet med små bokstäver kan accepteras som indata. Av säkerhetsskäl är standardinställningen False.

RFC 4648 tillåter valfri mappning av siffran 0 (noll) till bokstaven O (oh), och valfri mappning av siffran 1 (ett) till antingen bokstaven I (eye) eller bokstaven L (el). Det valfria argumentet map01 anger, när det inte är None, vilken bokstav siffran 1 ska mappas till (när map01 inte är None mappas siffran 0 alltid till bokstaven O). Av säkerhetsskäl är standardvärdet None, vilket innebär att 0 och 1 inte tillåts i indata.

Ett binascii.Error uppstår om s är felaktigt utfylld eller om det finns tecken som inte är alfabetiska i indata.

base64.b32hexencode(s)

Liknar b32encode() men använder det utökade hexalfabetet, enligt definitionen i RFC 4648.

Tillagd i version 3.10.

base64.b32hexdecode(s, casefold=False)

Liknar b32decode() men använder det utökade hexalfabetet, enligt definitionen i RFC 4648.

Den här versionen tillåter inte mappningar av siffran 0 (noll) till bokstaven O (oh) och siffran 1 (ett) till varken bokstaven I (eye) eller bokstaven L (el), eftersom alla dessa tecken ingår i det utökade hexalfabetet och inte är utbytbara.

Tillagd i version 3.10.

base64.b16encode(s)

Kodar bytesliknande objekt s med Base16 och returnerar den kodade bytes.

base64.b16decode(s, casefold=False)

Avkodar den Base16-kodade bytesliknande objekt eller ASCII-strängen s och returnerar den avkodade bytes.

Valfritt casefold är en flagga som anger om ett alfabet med små bokstäver kan accepteras som indata. Av säkerhetsskäl är standardinställningen False.

Ett binascii.Error uppstår om s är felaktigt utfylld eller om det finns tecken som inte är alfabetiska i indata.

Base85-kodningar

Base85-kodningen är inte formellt specificerad utan snarare en de facto-standard, vilket innebär att olika system utför kodningen på olika sätt.

Funktionerna a85encode() och b85encode() i den här modulen är två implementeringar av de facto-standarden. Du bör anropa funktionen med den Base85-implementering som används av den programvara du tänker arbeta med.

De två funktioner som finns i denna modul skiljer sig åt när det gäller hur de hanterar följande:

  • Huruvida omslutande <~ och ~> markörer ska inkluderas

  • Huruvida tecken för nya rader ska inkluderas

  • Den uppsättning ASCII-tecken som används för kodning

  • Hantering av nollbytes

Se dokumentationen för de enskilda funktionerna för mer information.

base64.a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False)

Koda bytesliknande objekt b med Ascii85 och returnera den kodade bytes.

foldspaces är en valfri flagga som använder den speciella kortsekvensen ’y’ istället för 4 på varandra följande mellanslag (ASCII 0x20) som stöds av ’btoa’. Denna funktion stöds inte av ”standard” Ascii85-kodningen.

wrapcol styr om utdata ska ha nya radtecken (b'\n') tillagda. Om värdet är annat än noll kommer varje utdatarad att vara högst så här många tecken lång, exklusive den efterföljande nya raden.

pad styr om indata ska fyllas i till en multipel av 4 före kodning. Observera att btoa-implementationen alltid paddar.

adobe styr om den kodade byte-sekvensen ska ramas in med <~ och ~>, vilket används av Adobe-implementationen.

Tillagd i version 3.4.

base64.a85decode(b, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\x0b')

Avkodar den Ascii85-kodade bytesliknande objekt eller ASCII-strängen b och returnerar den avkodade bytes.

foldspaces är en flagga som anger om kortsekvensen ’y’ ska accepteras som kortform för 4 på varandra följande mellanslag (ASCII 0x20). Denna funktion stöds inte av ”standard” Ascii85-kodningen.

adobe kontrollerar om inmatningssekvensen är i Adobe Ascii85-format (dvs. är inramad med <~ och ~>).

ignorechars ska vara en bytesliknande objekt eller ASCII-sträng som innehåller tecken som ska ignoreras från indata. Den bör endast innehålla blanksteg och innehåller som standard alla blanksteg i ASCII.

Tillagd i version 3.4.

base64.b85encode(b, pad=False)

Kodar bytesliknande objekt b med base85 (som används i t.ex. binära diffar i git-stil) och returnerar den kodade bytes.

Om pad är true, fylls indata på med b'\0' så att dess längd blir en multipel av 4 byte före kodning.

Tillagd i version 3.4.

base64.b85decode(b)

Avkodar den base85-kodade bytesliknande objekt eller ASCII-strängen b och returnerar den avkodade bytes. Utfyllnad tas bort implicit, om nödvändigt.

Tillagd i version 3.4.

base64.z85encode(s)

Kodar bytes-like object s med Z85 (som används i ZeroMQ) och returnerar den kodade bytes. Se Z85-specifikationen för mer information.

Tillagd i version 3.13.

base64.z85decode(s)

Avkodar den Z85-kodade bytesliknande objekt eller ASCII-strängen s och returnerar den avkodade bytes. Se Z85-specifikationen för mer information.

Tillagd i version 3.13.

Äldre gränssnitt

base64.decode(input, output)

Avkodar innehållet i den binära filen input och skriver den resulterande binära datan till filen output. input och output måste vara filobjekt. input kommer att läsas tills input.readline() returnerar ett tomt bytes-objekt.

base64.decodebytes(s)

Avkodar bytes-like object s, som måste innehålla en eller flera rader med base64-kodade data, och returnerar den avkodade bytes.

Tillagd i version 3.1.

base64.encode(input, output)

Kodar innehållet i den binära input-filen och skriver de resulterande base64-kodade data till output-filen. input och output måste vara filobjekt. input kommer att läsas tills input.read() returnerar ett tomt bytesobjekt. encode() infogar en ny rad (b'\n') efter var 76:e byte i utdata, samt säkerställer att utdata alltid slutar med en ny rad, enligt RFC 2045 (MIME).

base64.encodebytes(s)

Koda bytes-like object s, som kan innehålla godtyckliga binära data, och returnera bytes som innehåller base64-kodade data, med nya rader (b'\n') infogade efter var 76:e bytes utdata, och se till att det finns en efterföljande ny rad, enligt RFC 2045 (MIME).

Tillagd i version 3.1.

Ett exempel på användning av modulen:

>>> import base64
>>> encoded = base64.b64encode(b'data to be encoded')
>>> encoded
b'ZGF0YSB0byBiZSBlbmNvZGVk'
>>> data = base64.b64decode(encoded)
>>> data
b'data to be encoded'

Säkerhetsöverväganden

Ett nytt avsnitt om säkerhetsöverväganden har lagts till i RFC 4648 (avsnitt 12); det rekommenderas att säkerhetsavsnittet granskas för all kod som distribueras till produktion.

Se även

Modul binascii

Stödmodul som innehåller konvertering av ASCII till binär och binär till ASCII.

RFC 1521 - MIME (Multipurpose Internet Mail Extensions) Del 1: Mekanismer för att specificera och beskriva formatet för Internetmeddelanden

Avsnitt 5.2, ”Base64 Content-Transfer-Encoding”, innehåller en definition av base64-kodningen.