StegoToolkit

Palette Steganography Hider

Hide text or files inside GIF, indexed PNG, or 8-bit BMP colour palettes using Palette LSB, EZ Stego, Westfeld Parity, or PRNG Index Swap. AES-256, visual palette comparison. 100% client-side.

GIF + Indexed PNG + BMP
EZ Stego / Westfeld / PRNG
AES-256
100% client-side

Before uploading: share the output only as a file attachment (email, Telegram, Discord file). Social image upload or GIF platforms (Giphy/Tenor) re-encode GIFs and destroy hidden data.

Try demo — hide a message instantly

Loads a 256-colour sample GIF — no upload needed

Drop a GIF, indexed PNG, or 8-bit BMP here

RGB PNG and JPEG not supported (no palette)

100% Client-Side Processing

Your image is processed entirely in this browser tab. Nothing is uploaded.

How to Hide Data in a GIF or Indexed Image Palette (5 steps)

  1. Upload a GIF, indexed PNG, or 8-bit BMP — RGB PNG and JPEG have no palette and aren't supported
  2. Type your secret message or upload a file to hide
  3. Choose a method — Westfeld Parity is lowest distortion, EZ Stego is the classic CTF technique
  4. Add a passphrase for AES-256-GCM encryption (recommended)
  5. Click Embed — download your stego image

Palette Steganography Methods — What This Tool Handles

MethodMechanismCapacityBest For
Palette LSBModify LSBs of R/G/B in each palette entrypalette_size × 3 × bit_depth / 8 bytesTiny payloads / watermarks — capacity bounded by palette, not image
EZ Stego (Machado 1993)Sort palette by luminance, embed 1 bit/pixel via even/odd sorted position~1 bit per pixelClassic CTF technique — sorted palette is the tell
Westfeld ParitySwap pixel to nearest palette colour with matching parity~1 bit per pixelRecommended default — 4× less distortion than EZ Stego
PRNG Index SwapPassphrase-seeded PRNG selects pixels, then parity swap~1 bit per PRNG-selected pixelHardest to detect — non-sequential modification pattern

Frequently Asked Questions

What images support palette steganography?

GIF is the primary format — it always uses a palette of up to 256 colours. Indexed PNG (with a PLTE chunk, max 256 colours) and 8-bit BMP with a colour table also work. Standard RGB/RGBA PNG and JPEG have no palette and are not supported.

How is this different from LSB steganography?

LSB steganography operates on individual pixel RGB values. Palette steganography operates on the colour table (palette) pixels point to. Modifying a palette entry changes every pixel using that colour at once. Index-based methods (EZ Stego, Westfeld, PRNG) only swap which palette colour a pixel references, without touching the palette itself.

What is the 'sort palette by luminance' CTF hint?

EZ Stego's first step sorts the palette by luminance. The sorted palette is a strong visual signal — colours run dark to light instead of the original mixed order. If you see a CTF GIF with a luminance-sorted palette, try EZ Stego decoding.

Why does Westfeld's method produce less distortion than EZ Stego?

EZ Stego swaps to the adjacent entry in a luminance-sorted palette, which can be a very different colour. Westfeld's parity method searches all palette entries for the nearest colour with correct parity — colour swaps are always to the most perceptually similar available colour.

Is my image uploaded anywhere?

Never. All encoding runs entirely in your browser using a WebWorker and the Web Crypto API. Nothing leaves your device.

Can animated GIFs be used?

Yes, but only the first frame is used for embedding in this version — other frames are preserved unchanged in the output file. Multi-frame embedding is on the roadmap.

Related Tools