JPEG Steganography Hider
Hide secret data inside real JPEG images using DCT-domain steganography (F5, JSteg) — embedded in the JPEG's own quantized DCT coefficients, not pixels. Also supports JPEG Comment/APP metadata storage.
Upload your JPEG image
The cover image that will contain your hidden data
Supports JPEG/JPG files · max 50 MB desktop, 20 MB mobile
How to Hide Data in a JPEG Image (5 steps)
- Upload your JPEG photo as the carrier.
- Type your secret message or upload a file to hide.
- Add a passphrase to encrypt the payload (strongly recommended — also seeds F5's coefficient permutation).
- Choose an algorithm — F5 is best (most resistant to statistical detection), JSteg for higher capacity/CTF compatibility, or JPEG Comment for quick metadata storage.
- Click Encode — download your stego JPEG.
JPEG Steganography Methods Compared
| Method | Technique | Capacity | Best For |
|---|---|---|---|
| F5 (recommended) | Matrix encoding (Hamming codes) in DCT coefficients, passphrase-permuted | ~2–25 KB (varies by image) | Default choice — real DCT-domain steganography, resistant to classical chi-square/histogram steganalysis |
| JSteg | LSB of non-zero DCT coefficients, no passphrase needed | ~5–60 KB (varies by image) | CTF compatibility, higher capacity — detectable by chi-square/stegdetect |
| JPEG Comment (COM) | Embeds data in the COM segment (0xFFFE marker) — metadata only, NOT steganography | ~64 KB capacity | Quick, visible storage — works even on progressive JPEGs |
| APP Extension Segment | Uses custom APP3 marker (0xFFE3) with identifier — metadata only | ~64 KB capacity | Slightly more obscure than Comment, still visible to hex editors |
Frequently Asked Questions
What's the difference between F5 and JSteg?
JSteg replaces the LSB of non-zero DCT coefficients sequentially — simple but detectable by chi-square statistical tests. F5 uses matrix encoding (Hamming codes) so multiple payload bits only require one coefficient change, and a passphrase randomizes embedding positions, making statistical detection much harder.
Why does re-saving a JPEG destroy hidden data in other tools?
Most browser tools use the Canvas API, which converts JPEG to pixels for editing, then re-compresses as JPEG — this re-encoding changes DCT coefficients and destroys any pixel-LSB data. F5/JSteg here modify JPEG DCT coefficients directly, so the output may survive re-save if quality is preserved and no recompression occurs.
What JPEG quality should I use?
Quality 70–90 is optimal. High quality creates many non-zero DCT coefficients (high capacity); low quality (<50) has very few, severely limiting F5/JSteg capacity. The tool shows real capacity computed from your specific JPEG.
Will social media platforms strip this hidden data?
Yes, for all methods. Most social platforms re-encode uploaded JPEGs, destroying DCT-domain embeddings (F5/JSteg) and stripping metadata (Comment/APP). Share via email, direct file transfer, or file-attachment upload — never an image-upload flow.
Is JPEG Comment/APP metadata storage secure?
No — it is explicitly NOT steganography. Anyone with an EXIF viewer or hex editor can see COM/APP segments. Use F5 or JSteg for real concealment; use Comment/APP only for convenience.
Can I hide data in progressive JPEGs?
Only with JPEG Comment/APP — F5 and JSteg require a baseline JPEG (multiple DCT passes aren't supported). Re-export as baseline in GIMP/Photoshop, or use the Comment method.