(New to the vocabulary? Start with Steganography vs Cryptography.)

There are two fundamentally different ways to make a photo carry a message, and almost every disappointment people have with “hide text in image” apps comes from using one where they needed the other.

Way one: put the secret in the pixels

A digital photo is a grid of numbers. Change the last bit of a colour value — 182 becomes 183 — and no eye can tell. LSB steganography uses those last bits as storage: a 12-megapixel photo has room for a few megabytes of data that is invisible by construction.

Done properly, the text is encrypted first. Ciphertext looks like random noise, and random noise in the lowest bits looks like a camera sensor. Someone who suspects the photo finds nothing readable; someone who does not suspect it sees a harbour at dusk. That is what StegoSafe does, entirely on your device, with no server anywhere: AES-256-GCM, a key stretched from your passphrase, optionally split across several photos so that any three of five recover the secret. The long version is in What Happens When You Hide a Secret in a Photo.

What it is good for: keeping something for yourself, or handing it to someone in a way you control. A seed phrase in your camera roll. A recovery code in a family album. A file you AirDrop or put on a USB stick. Nothing to subpoena, nothing to breach, works offline forever.

Where it breaks: the moment anything rewrites the pixels.

What you do with the photoHidden data
Keep it, copy it, AirDrop it, back it upsurvives
Send it as a file / document / originalsurvives
Send it as a normal photo in WhatsApp, WeChat, Instagram, Messengerdestroyed — recompressed to JPEG
Screenshot it, crop it, apply a filter, convert PNG → JPEGdestroyed

Chat apps shrink and re-encode images to save bandwidth, and lossy compression throws away exactly the fine detail where the data lives. This is not a bug in any one app; it is what JPEG is for. Two rules cover nearly everything: keep it PNG, send it as a file.

Way two: put a reference in the photo, and the secret somewhere else

A robust watermark works the other way round. Instead of touching single bits, it spreads a faint pattern across the whole image, designed to be recoverable after resizing, recompression and a trip through a social network. The price is capacity: a robust watermark carries a handful of bytes, not a message.

A handful of bytes is enough for an identifier. That is how WaxSeal sends a secret through a photo that will be recompressed:

  1. The sender types the secret. It is encrypted on their device for the devices of the chosen recipients, whose keys live in the Secure Enclave.
  2. The ciphertext goes to the organisation’s vault, which cannot read it.
  3. The photo receives an eight-byte watermark that names the seal. Eight bytes — the secret is not in the photo.
  4. The photo is sent as an ordinary photo, in whatever chat the recipient uses. It survives the compression because the watermark was built to.
  5. The recipient’s app reads the watermark, fetches the ciphertext, checks that this device is allowed, and decrypts with Face ID.

Because the content lives in a vault and not in the pixels, the sender keeps control after sending: burn after reading, read limits, expiry, a PIN, and revocation — the photo is still in the chat, and it simply stops opening. More on that trade in A Photo You Can Take Back.

What it is good for: organisations sending a credential or a confidential note to a specific person through public channels, and needing to take it back.

What it costs: there is a server in the picture (one that holds only ciphertext), and both sides need the app. It is not the tool for a secret you want nobody and nothing else to ever be involved in.

The third way that is not a way: metadata

You can type text into a photo’s EXIF description. Every photo viewer shows it, and most platforms strip it on upload. It is a label. Do not use it for anything you would mind seeing on a screen.

How to choose

You want to…Use
keep a secret for yourself, offline, with no account and no serverpixels — StegoSafe
survive losing a device, or split trust between peoplepixels + Shamir splitting — StegoSafe, five photos, any three
send through WhatsApp / WeChat / Telegram as a normal photoa reference in the photo — WaxSeal
let it be opened once, expire it, or revoke it after sendinga reference in the photo — WaxSeal
hand over a file in person or by AirDropeither; pixels are simpler

The two are not rivals. One keeps the whole secret in the image and trusts nobody; the other keeps only a name in the image so that the secret can be governed. The mistake is expecting pixel steganography to survive a messenger, or expecting a watermark to hold a paragraph.

If you want to try the second approach, WaxSeal’s personal demo runs on one iPhone, iPad or Mac with no account: hide a test message in a photo, send the photo to yourself through any chat, save it back, and open it.

Frequently asked questions

Can you really hide a message inside a photo?
Yes. Every pixel has a little room that the eye cannot see. Steganography tools write encrypted data into the least significant bits of the pixel values; the photo looks identical and opens in any viewer. With a good tool the hidden data is encrypted first, so even someone who suspects it cannot read it.
Why did my hidden message disappear after I sent the photo in a chat?
The app recompressed the image. WhatsApp, WeChat, Instagram and most messengers resize and re-encode photos as JPEG, which rewrites exactly the fine detail where the data was stored. Send the image as a file or document (original quality), AirDrop it, or keep it as a PNG in storage you control.
Does metadata (EXIF) count as hiding text in an image?
It is the easiest place to put text and the first place anyone looks. Most platforms strip metadata on upload, and any photo viewer shows it. It is a label, not a hiding place.
What is the difference between steganography and a watermark?
Capacity versus robustness. Pixel-level steganography can carry kilobytes but is fragile: one recompression and it is gone. A robust watermark is spread across the whole image so it survives resizing and compression, but it carries only a handful of bytes — enough for an identifier, not for a message.

StegoSafe hides AES-256-encrypted secrets inside ordinary photos — in a deniable format with no header or marker — and can split them across several photos with Shamir Secret Sharing. Runs fully offline on iPhone, iPad and Mac; one universal purchase. For organisations that must send a secret and control it afterwards, see WaxSeal

Get StegoSafe →