Zo gebruik je het
- Kies Coderen om tekst of bytes naar Base85 om te zetten, of Decoderen om Base85 terug te zetten naar gegevens.
- Typ of plak je invoer, of gebruik Bestand openen. Zet Invoer als op Hex als je met ruwe bytes werkt.
- Het resultaat wordt bijgewerkt terwijl je typt. Zet bij het decoderen Uitvoer als op Tekst of Hex, afhankelijk van wat de gegevens bevatten.
- Kopieer het resultaat met Kopiëren of sla het met Downloaden op als bestand.
Wat is Base85?
Base85 is een familie van coderingen die elke 4 bytes omzetten in 5 tekens. Vijf cijfers in grondtal 85 kunnen 85 × 85 × 85 × 85 × 85 = 4.437.053.125 waarden bevatten, net genoeg voor elk 32-bitsgetal. Daardoor is de uitvoer maar 25% groter dan de invoer, tegenover 33% bij Base64.
Er bestaan meerdere Base85-alfabetten en die zijn niet uitwisselbaar: Ascii85 (Adobe, PDF), Z85 (ZeroMQ) en het alfabet op deze pagina. Dat gebruikt 0-9, A-Z, a-z en 23 symbolen: !#$%&()*+-;<=>?@^_`{|}~. De aanhalingstekens, komma, punt, slash, dubbele punt, backslash en vierkante haken zijn weggelaten.
RFC 1924, Git en Python
De tekenset komt uit RFC 1924, "A Compact Representation of IPv6 Addresses", die op 1 april 1996 als 1-aprilgrap werd gepubliceerd. Daarin werd voorgesteld om een 128-bits IPv6-adres te schrijven als één getal in grondtal 85 van precies 20 tekens. Niemand schrijft IPv6-adressen zo, maar het alfabet werd later hergebruikt voor algemene binaire gegevens:
- Git slaat binaire bestanden in patches (
git diff --binary,git format-patch) op als met zlib gecomprimeerde gegevens die met dit alfabet zijn gecodeerd, met een lengteteken aan het begin van elke regel. - Python 3.4 en hoger biedt
base64.b85encode()enb85decode(), waarvan de uitvoer overeenkomt met deze tool. - Mercurial gebruikt dezelfde codering voor binaire bestanden in diffs in Git-stijl.
Let op: RFC 1924 zet het hele 128-bits adres in één keer om, terwijl Git, Python en deze tool met groepen van 4 bytes werken. Een waarde van 16 bytes geeft daardoor een ander resultaat dan de methode uit de RFC.
Korte laatste groepen
Als de invoerlengte geen veelvoud van 4 is, wordt de laatste groep aangevuld met nulbytes en gecodeerd, waarna alleen de eerste n + 1 tekens worden bewaard: 1 byte wordt 2 tekens, 2 bytes worden 3 en 3 bytes worden 4. De decoder draait dit om, dus er zijn geen opvultekens nodig. Deze variant heeft geen afkorting voor nulbytes, anders dan de z van Ascii85.
# Python 3.4+
import base64
base64.b85encode(b'hello') # b'Xk~0{Zv'
base64.b85decode(b'Xk~0{Zv') # b'hello'
Specificatie
| Alfabet | 0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~ |
|---|---|
| Uitvoergrootte | 5 tekens per 4 bytes (125%) |
| Opvulling | Geen |
| Standaard | Tekenset van RFC 1924 (Git, Python b85) |
| Hoofdlettergevoelig | Ja |
Voorbeelden
| Invoer (UTF-8) | Uitvoer |
|---|---|
Hello, World! | NM&qnZ!92JZ*pv8Ap |
Base64.is | LSb`dHZ(42a{ |
你好 | <h`KfrM& |
Veelgestelde vragen
Is Base85 hetzelfde als Ascii85?
z en kan tussen Adobe-begrenzers staan. Gebruik de pagina Ascii85 voor PDF- en PostScript-gegevens.Was RFC 1924 een echte standaard?
Nee. Het is een informatieve RFC die als 1-aprilgrap werd gepubliceerd en nooit voor IPv6-adressen is gebruikt. De tekenset werd later populair via Git en Python.
Hoeveel groter is Base85-uitvoer?
Kan ik Base85 in JSON of XML zetten?
<, > en & worden ge-escapet. Base85 is niet URL-veilig.