StegoToolkit

Text-in-Image Hider

Hide secret text messages inside images using adaptive LSB steganography. PSNR/SSIM quality report, chi-square vulnerability score, AES-256 encryption. Always outputs PNG.

Drop image or click to browse

PNG, BMP, WebP recommended — max 50 MB (10 MB mobile)

100% client-side — pixel processing happens entirely in your browser via Canvas API. Nothing is uploaded. Output is always lossless PNG.

How to Hide Text in an Image (4 steps)

  1. Upload any image — PNG, BMP, or WebP recommended (JPEG input is always saved as PNG to preserve hidden data)
  2. Type your secret message in the text box — capacity updates live as you type
  3. Choose a preset: Private Message, Watermark, or CTF — or drag the Stealth ↔ Capacity slider
  4. Optionally enable AES-256 encryption with a password, then click Hide Text in Image and download

Text-in-Image Encoding Methods — What This Tool Handles

MethodTechniqueQualityBest For
Sequential LSBHides payload bits in LSBs of pixels, left-to-right~51 dB PSNR at 1-bit — imperceptibleMaximum compatibility with other decoders
Seeded ScatterPseudo-random pixel order via Mulberry32 PRNG seed~51 dB PSNR — defeats chi-square detectionAdded security — seed acts as second key layer
Adaptive Edge-PriorityPrioritises high-complexity edge regions; avoids smooth areas52–57 dB PSNR — highest quality, hardest to detectProfessional watermarking and stealth communication
Channel SelectionEncode in R, G, B, or all channels independently1/3 capacity per channel vs full (all channels)Red/Blue channels tolerate more change than Green
Reed-SolomonError correction so payload survives minor re-processing+11–43% overhead depending on RS levelProfessional distribution where image may be re-saved

Frequently Asked Questions

Will the image look different after encoding?

No. At 1-bit depth with Adaptive Edge-Priority, PSNR is typically 52–57 dB — completely imperceptible. A post-encode quality report shows exact PSNR, SSIM, and chi-square detectability so you can verify stealth before sharing.

Why is output always PNG, even if I upload a JPEG?

JPEG uses lossy compression that destroys LSB modifications — your hidden text would be wiped on save. Output is always lossless PNG regardless of input format. If you need JPEG compatibility, use a different steganography method.

What does the Stealth ↔ Capacity slider do?

It maps to a complete configuration preset: far left = Adaptive + Blue channel + 1-bit + RS-20 (maximum stealth, less capacity). Far right = Sequential + All channels + 2-bit (maximum capacity, slightly higher detectability). Advanced settings let you override any individual value.

Is my image uploaded anywhere?

Never. All processing uses the Canvas API and a WebWorker entirely in your browser. Your image never leaves the device.

What is a scatter seed?

The seed controls which pseudo-random sequence is used to scatter payload bits across the image. Both encoder and decoder must use the same seed. Think of it as a second independent security layer alongside the AES password.

Will the hidden text survive being uploaded to Instagram or WhatsApp?

No. Instagram, WhatsApp, Facebook, and iMessage re-encode images using lossy JPEG compression, which destroys LSB data. Use Google Drive, Discord (file mode), or direct email attachment instead. The result view shows a platform survival table.

How much text can I hide?

A 1920×1080 image can hold ~760 KB at 1-bit depth with all channels. At 2-bit, that doubles to ~1.5 MB. The capacity bar updates live as you configure. Adaptive method has ~65% of sequential capacity due to edge-pixel restriction.

What is a chi-square vulnerability score?

After encoding, the tool runs the chi-square steganalysis attack on your output. It shows what a professional steganalysis tool would see. A p-value above 0.5 means sequential LSB is detectable. Use Adaptive or Scatter method to reduce this score.