Base64 diff

Decode two Base64 or Base64url strings and diff the bytes underneath — so padding, line wrapping and +/ vs -_ never look like a real change.

Try:
Byte diff

Compare Base64 by payload, not by spelling

Base64 strings are wrappers around bytes. Padding, line wrapping, data-URI prefixes and the standard (+ and /) versus URL-safe (- and _) alphabets can make two encodings look unrelated even when they decode to the same payload. This tool decodes both sides first, then compares the underlying bytes.

Use it when a token, attachment, signed blob or encoded API field changed and you need to know whether the payload changed too. The report names the first differing offset, total differing bytes, size delta, SHA-256 for each side and compact byte ranges with both hex and printable text. For text payloads, switch to Unified text diff; for binary payloads, use the side-by-side hexdump.

Everything runs locally in your browser through WebAssembly. The Base64 strings are never uploaded anywhere.

Worked example

Compare SGVsbG8gd29ybGQh (Hello world!) with SGVsbG8gV29ybGQh (Hello World!) and choose Readable summary:

Payloads differ: both 12 bytes. First difference at offset 0x0006 (6).
1 byte differs across 1 range.
@ 0x0006 (1 byte) changed: 77 |w| -> 57 |W|

The encoded strings differ in several characters, but the decoded payload differs by exactly one byte: lowercase w (0x77) became uppercase W (0x57).

Useful output modes

Limits and edge cases

FAQ

Why not just compare the Base64 strings directly?

String comparison reports encoding noise: padding, wrapped lines, URL-safe alphabets and data-URI prefixes all change the text without changing the bytes. This tool normalises by decoding first, so the result answers the payload question.

Can it compare Base64url tokens?

Yes. Leave Alphabet on automatic detection for most cases, or choose Base64url when you want to force RFC 4648 URL-safe decoding. Automatic mode detects each side independently but rejects a single input that mixes the two alphabets.

What does shift-aware alignment do?

Offset alignment compares byte 10 with byte 10, byte 11 with byte 11, and so on. If one byte was inserted near the front, every later byte appears different. Shift-aware alignment trims the common prefix and suffix first, so that case is reported as one insertion.

When should I use the text output?

Use Unified text diff only when the decoded bytes are UTF-8 text, such as a Base64-encoded JSON or config file. Binary payloads are rejected with a message pointing you to the hexdump output.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool base64-diff "SGVsbG8gd29ybGQh" 'right=SGVsbG8gV29ybGQh'

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/base64-diff/?left=SGVsbG8gd29ybGQh&right=SGVsbG8gV29ybGQh&alphabet=auto&strict=true&align=offset&output=report&bytes_per_row=8&context_rows=2

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.