Grain

Hide a file inside a picture. The file is encrypted with a passphrase first — real AES-256-GCM, not an obfuscation — and only the ciphertext is ever written into the image's pixels. Nothing here is uploaded anywhere; encrypting, hiding and reading all happen in this tab.

Back to the rest of the site

Worth saying plainly: a picture with more entropy in its low bits than a camera or a renderer would ever produce is not invisible to a statistical steganalysis tool, only to a human eye and to a server that never receives it. Treat this as a way to carry a file inside a picture, not as a way to defeat forensic inspection.

Hide a file

1. Pick a carrier image

A PNG or any image your browser can decode. It is never sent anywhere and never modified in place — hiding a file in it produces a second, new PNG.

or

2. Pick the file to hide

Any file type. Its name and contents are both encrypted before a single bit of it touches the carrier.

3. Set a passphrase

This is the only key. There is no recovery: lose the passphrase and the hidden file is unreadable, by design.

Longer is what actually matters here: this page runs 600,000 rounds of key derivation specifically to make a short passphrase expensive to guess, but it cannot make a short one as strong as a long one.

Reveal a hidden file

1. Pick a stego image

A PNG produced by the tool above. Any resave through a lossy format, or through an editor that recompresses pixels, destroys the hidden bits — this only ever works on the exact PNG bytes this page wrote.

2. Enter the passphrase