Geen upload, 100% lokaal, geen account

Artikel

Gegevens privé coderen en decoderen

Ontwikkelaars plakken dagelijks tokens, payloads en inloggegevens in pagina's voor coderen en decoderen. De handigste draaien op een server, wat betekent dat je gegevens je apparaat verlaten voor een taak die dat nooit nodig had. Deze vier tools draaien volledig in je browser, dus de gegevens blijven bij jou.

Base64: het ziet er door elkaar uit, maar is niet geheim

Base64 is een codering, geen versleuteling. Het zet binaire gegevens om in tekst die een kopieer- en plakactie of het transport door systemen die alleen eenvoudige tekens aankunnen overleeft. Iedereen die de Base64-tekenreeks ziet, kan die in één stap terug naar het origineel decoderen, dus een tekenreeks met een API-sleutel, een privécertificaat of de inhoud van een e-mail is volledig leesbaar voor wie hem bezit. Het risico is dat die waarde zich vaak verschuilt in configuratiebestanden, data-URL's of authenticatie-headers en onbegrijpelijk lijkt, wat verleidt om hem in de eerste de beste online decoder te plakken. Die decoder ontvangt het ruwe geheim. Een tool die Base64 lokaal decodeert, toont je de oorspronkelijke bytes zonder dat de waarde ooit een server bereikt.

Hello! gecodeerd naar SGVsbG8h en weer gedecodeerd, wat laat zien dat Base64 door iedereen zonder sleutel omkeerbaar is.

URL-codering: querystrings dragen meer dan je denkt

Procentcodering laat je spaties, accenten en gereserveerde tekens veilig in een URL plaatsen. De tekst die je codeert of decodeert is vaak een echte querystring uit een toepassing, en die dragen sessie-identificatoren, zoektermen, e-mailadressen, doorverwijsdoelen en soms ondertekende parameters. Een volledige URL in een externe encoder plakken geeft dat alles in één keer aan een derde partij, en querystrings zijn precies het soort waarde dat in serverlogs belandt. Coderen en decoderen in de browser betekent dat de URL in het geheugen op je eigen apparaat wordt verwerkt en nooit wordt verzonden terwijl je eraan werkt.

JWT: de payload is ondertekend, niet verborgen

Een JSON Web Token bestaat uit drie met punten verbonden Base64url-secties: een header, een payload en een handtekening. De handtekening bewijst dat het token niet is gewijzigd, maar verbergt de payload op geen enkele manier; die decodeert naar leesbare JSON met gebruikers-identificatoren, rollen, vervaltijden en alle aangepaste claims die de uitgever toevoegde. Een geldig token is ook een levend inloggegeven: tot het verloopt kan iedereen die het bezit als de gebruiker handelen. Een werkend token in een online decoder plakken stuurt een actief inloggegeven naar een server die je niet beheert. Een decoder die het token in je browser ontleedt, onthult dezelfde header en payload zonder dat dat token ooit de pagina verlaat.

De drie delen van een JWT: leesbare header, leesbare payload, en een handtekening die integriteit bewijst zonder iets te verbergen.

Hashing: de invoer telt meer dan de digest

Een hashfunctie zet elke invoer om in een digest met vaste lengte, en je kunt de digest niet terugrekenen naar de invoer. Die eigenschap maakt hashing nuttig om de integriteit van een bestand te controleren of waarden te vergelijken zonder het origineel op te slaan. De adder zit aan de invoerkant: om de hash van een wachtwoord, een document of een configuratiegeheim te berekenen, moet je de echte waarde aan de tool geven. Draait die tool op een server, dan reist de gevoelige invoer daarheen, ook al wordt alleen de onschuldige digest teruggegeven. De hash lokaal berekenen houdt de invoer op je apparaat, zodat je de digest krijgt die je nodig hebt zonder bloot te geven wat je hashte.

Base64-codering: byte-mapping en opvulling

Base64 vertaalt 8-bit bytes naar 6-bit tekens door drie invoerbytes (24 bits) te groeperen in vier 6-bit waarden. Elke 6-bit waarde wordt toegewezen aan een teken in het Base64-alfabet (A-Z, a-z, 0-9, +, /). Omdat het proces invoer vereist die deelbaar is door 24 bits, worden korte invoeren opgevuld: één resterende byte levert twee opvultekens op (==), twee resterende bytes leveren er één op (=). De Base64url-variant, gebruikt in JSON Web Tokens (JWTs), vervangt + door - en / door _ om de tekenreeks URL-veilig te maken, en verwijdert de =-opvulling volledig, omdat opvultekens fouten kunnen veroorzaken in strikte URI-parsers. Dit onderscheid herkennen is nuttig bij het debuggen van tokenverwerking: een JWT die er misvormd uitziet, kan gewoon Base64url-gecodeerd zijn in plaats van standaard Base64.

JWT-handtekeningen: HS256, RS256 en algoritme-verwarring

De beveiliging van een JSON Web Token hangt volledig af van de handtekening, het derde punt-gescheiden segment. Met HS256 (HMAC-SHA256) ondertekent de server de Base64url-gecodeerde header en payload met een geheime sleutel. De SHA-256-hashfunctie biedt botsingsbestendigheid: het is computationeel onhaalbaar om een gewijzigde payload te produceren die naar dezelfde handtekening hasht zonder de geheime sleutel te kennen. Met RS256 ondertekent de server met een RSA-privésleutel en verifieert met een publieke sleutel. Een bekende kwetsbaarheid, algoritme-verwarring genaamd, ontstaat wanneer een serverbibliotheek het verwachte algoritme niet strikt afdwingt. Een aanvaller kan het alg-veld in de tokenheader wijzigen van RS256 naar HS256 en het token ondertekenen met de publieke sleutel van de server als HMAC-geheim, omdat publieke sleutels vaak toegankelijk zijn. Het lokaal decoderen van de JWT-header in de browser laat u zien welk algoritme daadwerkelijk is opgegeven, zonder het actieve token bloot te stellen aan logboeksystemen van derden.

Tools in dit artikel

Veelgestelde vragen

Is Base64 of URL-codering een vorm van beveiliging?

Nee. Beide zijn omkeerbare coderingen, bedoeld voor veilig transport van gegevens, niet om ze te beschermen. Iedereen die de gecodeerde tekenreeks kan lezen, decodeert die meteen, zonder sleutel of wachtwoord. Moet je een waarde vertrouwelijk houden, versleutel die dan met een degelijk algoritme en beheer de sleutel apart. Behandel elke Base64- of procentgecodeerde waarde alsof die in platte tekst staat.

Waarom maakt het uit waar ik een token decodeer of een wachtwoord hash?

Omdat de invoer het gevoelige deel is. Een geldig JWT is een levend inloggegeven, en het wachtwoord dat je hasht is het echte geheim. Een servergebaseerde tool ontvangt die ruwe invoer al voordat hij een resultaat teruggeeft, wat betekent dat een kopie kan worden gelogd of bewaard op een plek die je niet ziet. Een tool die in je browser draait, voert dezelfde bewerking uit in het geheugen van je eigen apparaat, zodat het token of wachtwoord nooit ergens heen wordt gestuurd.