Base64 vs Hex Encoding

Both Base64 and hexadecimal (hex) encode binary data as text — but they make different tradeoffs between size efficiency and human readability. Here's when to use each.

INPUT
OUTPUT
Type or paste to encode / decode

Encode or decode right here — runs locally in your browser, nothing is uploaded.

How They Work

Hex (Base16) encodes each byte as two hexadecimal digits (0-9, a-f). Each hex digit represents 4 bits, so 1 byte = 2 characters.

Base64 groups 3 bytes and encodes them as 4 characters. Each character represents 6 bits.

Input: 3 bytes = [0x48, 0x65, 0x6C]  = "Hel"

Hex:    "48656c"         → 6 characters  (200% of original)
Base64: "SGVs"           → 4 characters  (133% of original)

Size Comparison

Encoding    Characters  Overhead   Bits per char
─────────────────────────────────────────────
Binary      —           0%         8 bits
Hex         16          100%       4 bits
Base64      64          ~33%       6 bits
Base85      85          ~25%       6.5 bits

Encoding the same 1 KB of binary data:

Original:   1,024 bytes
Hex:        2,048 bytes  (+100%)
Base64:     1,368 bytes  (+33.6%)

Base64 is significantly more space-efficient than hex. For large files (images, PDFs), this difference matters.

Alphabet Comparison

Hex alphabet (16 chars):
0123456789abcdef

Base64 alphabet (64 chars):
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

Hex is more human-readable — each byte maps to exactly two characters, and you can easily read byte values. Base64 is more compact but harder to read byte-by-byte.

When to Use Hex

  • Cryptographic hashes: MD5, SHA-1, SHA-256 are almost always displayed as hex (sha256: a1b2c3d4...)
  • Color values in CSS: #ff6b6b, #0891b2
  • Memory addresses and byte dumps: Debugger output, hex editors
  • MAC addresses and UUIDs: 00:1A:2B:3C:4D:5E, 550e8400-e29b-41d4-a716-446655440000
  • Database-stored binary: PostgreSQL bytea columns often display as hex
  • When byte-level inspection matters: Hex lets you see exactly what each byte is

When to Use Base64

  • File and image transfer: Email attachments, data URIs, API responses with binary fields
  • JWT tokens: JWTs use Base64URL for compact encoded JSON payloads
  • TLS/SSL certificates (PEM format): The Base64-encoded DER data between BEGIN/END markers
  • HTTP Basic Auth: Authorization: Basic dXNlcjpwYXNzd29yZA==
  • SSH public keys: ssh-rsa AAAA...
  • Anywhere size matters: Base64's 33% overhead is much better than hex's 100%

Code Examples

// JavaScript: same data, both encodings
const data = crypto.getRandomValues(new Uint8Array(16)); // 16 random bytes

// Hex
const hex = Array.from(data).map(b => b.toString(16).padStart(2, '0')).join('');
// e.g., "a1b2c3d4e5f6789012345678abcdef01" (32 chars)

// Base64
const base64 = btoa(String.fromCharCode(...data));
// e.g., "oQ+TpNRn..." (24 chars + padding)
## Python: hash as hex vs base64
import hashlib, base64

data = b"hello world"
digest = hashlib.sha256(data).digest()  # 32 bytes

hex_str    = digest.hex()               # 64 hex chars
base64_str = base64.b64encode(digest).decode()  # 44 base64 chars

print(hex_str[:32] + "...")
# b94d27b9934d3e08a52e52d7da7dabfac484efe04294e6...
print(base64_str)
# uU0nusNkPkv5ZNnCxeUKWA==

Quick Reference

Use case                    Format    Why
─────────────────────────────────────────────────────────────
SHA-256 hash display        Hex       Convention, readable
JWT token                   Base64URL Compact, URL-safe
PEM certificate             Base64    Standard (RFC 7468)
Data URI (CSS/HTML image)   Base64    ~33% overhead vs 100% for hex
UUID / GUID                 Hex       Convention
SSH key                     Base64    Convention
HTTP Basic Auth             Base64    RFC 7617
Password hash storage       Hex       Convention (bcrypt uses Base64)
PostgreSQL bytea            Hex       Default display format
JSON binary field           Base64    Compact, JSON-friendly

Frequently Asked Questions

Should I use Base64 or hex encoding?

Use Base64 when size efficiency matters (JWTs, data URIs, API payloads, email attachments) — it is ~33% larger than binary. Use hex when byte-level human readability matters (cryptographic hashes, MAC addresses, memory dumps, CSS colors).

Is Base64 more compact than hex?

Yes. Base64 adds ~33% overhead (3 bytes become 4 characters). Hex adds 100% overhead (1 byte becomes 2 characters). For the same binary data, Base64 output is roughly half the size of hex output.

Why are SHA-256 hashes displayed as hex instead of Base64?

Convention. Hex is easier to visually inspect byte-by-byte and compare, and has been the traditional format for cryptographic hashes since before Base64 was common. Many tools (git, openssl, sha256sum) output hex by default.

Encode or decode Base64 instantly

Paste any text or binary data into base64.dev to encode or decode it — no sign-up needed.

Open base64.dev →