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 ärNone
, 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 ettTypeError
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 ärTrue
resulterar dessa icke-alfabetiska tecken i indata i ettbinascii.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 kodadebytes
. 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 avkodadebytes
.
- 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 ärNone
mappas siffran 0 alltid till bokstaven O). Av säkerhetsskäl är standardvärdetNone
, 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 inkluderasHuruvida 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.