StegoToolkit

EXIF Data Hider

Hide secret messages and files in JPEG, PNG, WebP, TIFF or HEIC metadata, or scrub it. Methods: UserComment, ImageDescription, XMP namespace, IPTC caption, GPS coordinates, MakerNote, thumbnail. Optional AES-256-GCM encryption.

Processed in your browser
Optional AES-256
Multiple Methods
Metadata Scrubbing

Try the demo instantly

Loads a 200×200 demo photo — no upload needed

Drop an image here or click to browse

JPEG, PNG, WebP, TIFF, or HEIC · Max 50 MB

Processed in your browser

Your image is read and changed in this browser tab and is not sent to a StegoToolkit server. Basic usage analytics record coarse facts such as the chosen method and a file-size range, never the image or your payload. Showing a GPS map is the one exception: if you choose to load it, your browser requests map tiles from OpenStreetMap, which can reveal the area and your IP address (see the notice before it loads).

How to Hide Data in EXIF Metadata (5 steps)

  1. Upload a JPEG, PNG, WebP, TIFF or HEIC image (up to 50 MB; 15 MB or less is kinder on phones).
  2. Choose a hiding method. UserComment is the default; Forensic mode adds the rest. Some methods work only in JPEG.
  3. Enter your secret message or attach a file. Add a password to encrypt it with AES-256-GCM.
  4. Click Encode. The tool writes the data into the metadata and checks that it can read it back before offering the download.
  5. Download the image. The pixels are unchanged; only the metadata differs. Use the Scrub tab to remove existing metadata instead.

EXIF Steganography Methods Comparison

MethodTechniqueCapacityBest For
UserCommentBase64 text in the standard EXIF UserComment field (encrypted if you set a password)About 49 KB in JPEG, 64 KB in PNG, WebP, TIFF and HEICDefault. Short to medium messages and small files
ImageDescriptionBase64 text in the EXIF ImageDescription field4 KBShort messages in a field most viewers display
XMP NamespaceAn XMP packet with a custom steg: namespace; Reed-Solomon optionalAbout 48 KB in JPEG; at least 4 MB tested in PNG, WebP and TIFFLarger payloads. Use PNG, WebP or TIFF for anything above 48 KB
IPTC CaptionBase64 text in the IPTC-IIM caption of an APP13 block (JPEG only)About 1.4 KB (IPTC allows 2000 characters per caption)Short messages in a field photo editors show
GPS CoordinatesUp to 8 bytes in the latitude and longitude numbers. Never encrypted8 bytes, returned zero-padded to 8Tiny values, CTF-style puzzles
MakerNotePayload behind a camera-vendor signature (Canon, Nikon, Olympus, Panasonic or FujiFilm), with a matching Make and Model written16 KBForensic mode. A signature prefix only, not a copy of a real vendor's layout
ThumbnailPayload appended after the end marker of the EXIF thumbnail (JPEG only)About 47 KBForensic mode. Bytes after the thumbnail's end marker are normally ignored by viewers (not tested)

What Hiding Data in Metadata Actually Does

An image file is its pixels plus metadata: camera details, dates, a location, free-text fields and an embedded thumbnail. Metadata steganography writes your payload into one of those fields instead of into the pixels. The pixels are left exactly as they were: in our tests the image data was byte-identical before and after hiding for every method in JPEG, PNG, TIFF and (for the methods tested) WebP. We did not run that test for HEIC.

The cost is visibility. Any EXIF viewer can show the field, and this tool's own data is base64 text behind a short header, so it is easy to spot by anyone who looks. Nothing here makes a file undetectable. And many social and messenger apps re-encode photos and rewrite their metadata, so the data may not survive being posted; we have not tested individual services.

Which Method Should You Choose?

Use UserComment for most messages: it is a standard field, holds the most data of the EXIF text fields, and every supported format has it. Use ImageDescription for short text when you want it to appear in viewers that show a caption. Use XMP for payloads above about 48 KB, but only in PNG, WebP or TIFF: a JPEG stores EXIF and XMP in segments of at most 64 KB, so XMP in a JPEG holds about the same as UserComment.

IPTC Caption, MakerNote and Thumbnail are JPEG-friendly extras (IPTC and Thumbnail are JPEG-only). GPS Coordinates holds 8 bytes at most, is never encrypted and has no length field, so a shorter message always comes back padded with zero bytes. The Extractor's Auto-Detect does not report a GPS result unless those 8 bytes read as printable text, because every geotagged photo would otherwise look like it holds a secret.

Capacity: The Limit Is Real, and It Depends on the Format

A JPEG keeps its EXIF in one segment whose length field is 16 bits, so it can never exceed 65,535 bytes, and the payload is base64-encoded inside it (4 bytes of text for every 3 of data). Measured on a plain JPEG, the real limits are about 49 KB for UserComment, 48.8 KB for XMP and 47.5 KB for the thumbnail, and the tool enforces figures just under those. A larger payload cannot be stored in a JPEG at all, so it is refused. Every encode also reads its own output back, and a file is offered for download only if it returns your data byte for byte.

A password adds 48 bytes to the payload (a 4-byte length, a 16-byte salt, a 12-byte IV and a 16-byte authentication tag). A carrier that already holds a lot of EXIF has less room than the table shows, and that is what the read-back check catches. PNG, WebP and TIFF carry XMP in chunks without the 64 KB limit: we tested 4 MB, including with a password, and did not look for the upper limit.

Scrubbing Metadata: What Is Removed and What Is Kept

The Scrub tab reads the image, shows the privacy-relevant fields it finds, strips them in your browser and then re-reads the cleaned file so you can see what a scan still finds. The Orientation tag (when it is not the default) and the colour profile are kept so the picture still displays correctly. In the table below, "removed" means removed in our tests: we planted a unique marker in every location, scrubbed, and searched the output bytes for the markers.

A full scrub keeps only what the pixels need. It removes, among other things, the lens model, the unique image ID, JPEG comments, IPTC captions, the embedded thumbnail (a second, smaller copy of the picture), every PNG text chunk and timestamp, and a TIFF's description, XMP and whole Exif block. "Scrub before encode" on the Hide tab uses the same code; a GPS-only scrub is available for JPEG and TIFF, and every other format is scrubbed completely.

Two honest limits. Scrubbing removes metadata, not identifying content: a face, a street sign or a camera's sensor noise stays in the pixels. And the re-check after scrubbing uses this tool's own reader, so it is a sanity check rather than an independent forensic audit. Showing the GPS location on a map downloads map tiles from OpenStreetMap, which tells them the area (and your IP address); the map loads only after you click a button that says so.

How Strong Is the Encryption?

If you set a password, the payload is encrypted before it is hidden, in your browser, with the Web Crypto API. The cipher is AES-256 in GCM mode. The 256-bit key is derived from your password with PBKDF2 using HMAC-SHA-256 and 100,000 iterations. Every encryption generates a fresh random 16-byte salt and a fresh random 12-byte IV with the browser's cryptographically secure random generator (crypto.getRandomValues), so encrypting the same message twice gives different bytes. The stored layout is a 4-byte length, the salt, the IV, then the ciphertext followed by a 16-byte authentication tag — 48 bytes added in total. The tag means a wrong password, or any change to the ciphertext, makes decryption fail instead of returning garbage.

These are standard, widely used primitives, but this implementation has not had an independent audit, and using them does not make the system unbreakable. Their limits matter. Anyone who finds the hidden data can copy the ciphertext and try passwords against it offline, so your password is the real defence: use a long random passphrase, not a word or a date. The key derivation uses 100,000 PBKDF2-HMAC-SHA-256 iterations. This is below OWASP's commonly cited 600,000-iteration recommendation for password storage. That recommendation is not a direct requirement for this file-encryption format, but the lower count makes a strong, unique password especially important. The iteration count is fixed in the code and is not written into the file, so raising it requires a new, versioned format so that files already made can still be opened.

Encryption hides what the data says, not that it exists, and it does not hide the length: AES-GCM ciphertext is the same length as the plaintext, and the encrypted layout adds a fixed 48 bytes of overhead: its own 4-byte length field, the salt, the IV and the authentication tag, separate from any length or framing the tool puts around it. No padding is added. There is no key file and no way to recover a forgotten password. We have not measured key-derivation time on phones or older devices, so very large batches or slow devices may take noticeably longer per file. The tool is intended for educational and personal use; do not rely on it as the only protection for sensitive information, or against a well-resourced adversary.

Error Correction, Deniability and Other Options

Reed-Solomon (XMP method only, Forensic mode) is a real Reed-Solomon code: 10, 20 or 30 parity bytes per 223-byte block repair up to 5, 10 or 15 changed bytes in that block. It repairs a few scattered edits. It does not help if an app rewrites the whole metadata block, which removes the payload entirely.

The "Plausible deniability" switch (Forensic mode) writes the payload without the EXIFsteg:v1 header, so Auto-Detect cannot find it; you must then choose the exact method and tick the same switch in the Extractor. The separate "Decoy + Real Payload" section (JPEG only) puts a plain decoy text in UserComment and your encrypted payload in MakerNote. Neither option makes the data invisible: the fields still exist and still hold unexplained text. Timestamp spoofing and the MakerNote camera profile change what the metadata claims about the photo; the MakerNote profile is a vendor signature prefix, not a faithful copy of a real camera's internal layout.

Supported Formats and Limits

JPEG, PNG, WebP, TIFF and HEIC files up to 50 MB are accepted (15 MB or less is recommended on phones, because TIFF and HEIC need byte-level rewriting that can be slow on small devices; we did not time it). IPTC Caption and Thumbnail work in JPEG only; XMP does not work in HEIC. The tool's own XMP, MakerNote and UserComment output is read by the Extractor; it does not read hidden data written by other tools' layouts.

Capacity by Method and Format (bytes of payload)

Enforced by the encoder and tested at the exact limit and one byte over for every combination in the table (a JPEG UserComment of 49,000 bytes is accepted, 49,001 is refused). With a password subtract 48 bytes. The JPEG figures sit just under what a bare carrier really holds (UserComment 49,086, XMP 48,798, Thumbnail 47,460 in our measurement); a carrier that already has a lot of EXIF holds less.

MethodJPEGPNG / WebP / TIFFHEIC
UserComment49,00064,00064,000
ImageDescription4,0004,0004,000
XMP Namespace48,0004 MB tested, no limit foundnot supported
IPTC Caption1,479not supportednot supported
GPS Coordinates8 (never encrypted)8 (never encrypted)8 (never encrypted)
MakerNote16,00016,00016,000
Thumbnail47,000not supportednot supported

What Scrub Removes in Each Format

Checked by planting a unique marker in each location, running the Scrub tab and searching the output. Pixel data was byte-identical afterwards in JPEG, PNG and TIFF.

FormatRemovedKept
JPEGAll EXIF (GPS, device, dates, lens, unique ID, comments), the embedded thumbnail, XMP including extended XMP, IPTC, JPEG comment segmentsImage data, ICC colour profile, Orientation when it is not the default
PNGtEXt, zTXt and iTXt text chunks, the tIME timestamp, eXIf, XMP, private chunksImage data, transparency, gamma, colour profile, physical size, animation chunks
WebPEXIF and XMP chunksImage data, colour profile and animation chunks
TIFFEvery tag except those that describe the pixels: description, XMP, IPTC, Photoshop data, Exif and GPS blocksLayout, compression, colour, resolution and ICC profile tags
HEICThe Exif itemEverything else. Other metadata items, if a file has them, are not removed and this was not tested

Examples

Input: A 40-byte message with a password, UserComment, in a JPEG

Result: Accepted and read back exactly. The encrypted payload is 88 bytes (40 + 48). The same 40-byte case also passed for ImageDescription and MakerNote in JPEG, PNG, WebP, TIFF and HEIC.

Meaning: Short messages fit every method that supports the format, with room to spare.

Input: A 49,000-byte file in a JPEG's UserComment, no password

Result: Accepted and read back exactly. 49,001 bytes is refused: "Payload too large … exceeds what UserComment (AES-256) can hold in a JPEG file (about 49000 bytes)."

Meaning: The limit is a property of the JPEG segment, not of this tool.

Input: A 100,000-byte file hidden with XMP in a JPEG

Result: Refused with a message to use a PNG, WebP or TIFF image. The same file in a PNG with XMP is accepted.

Meaning: A JPEG cannot store that much in one metadata segment, so refusing is the correct outcome.

Input: A JPEG with the camera make, GPS position, a comment, an IPTC caption and an XMP author planted in it, run through Scrub

Result: None of the 16 planted markers remained in the output, and the picture data was byte-identical. The re-check reported no GPS, XMP or privacy fields.

Meaning: Scrub removed the metadata but not the picture, which can still identify the place.

How the Hider Works

1. Read the image

The file is read in your browser in a Web Worker and its metadata is parsed.

2. Prepare the payload

An optional password encrypts it with AES-256-GCM (+48 bytes); optional Reed-Solomon parity is added for XMP.

3. Check it fits

The size is compared with the real limit for that method and format. Too large is refused with the limit stated.

4. Write the metadata

The payload is written, base64-encoded behind an EXIFsteg:v1 header (unless deniability is on), into the chosen field. The pixels are not touched.

5. Read it back

The finished file is re-parsed and decoded with the real extractor; only a byte-for-byte match is offered for download.

What the results mean

ResultWhat it meansWhat to do
The success screen appearsThe payload was written and read back successfullyDownload the file; send the original file, not a re-uploaded copy
Payload too large … about N bytesThe payload plus overhead is more than that method holds in this formatShorten it, use another method, or use PNG, WebP or TIFF with XMP for large payloads
Written but could not be read backThe data did not survive a re-read, for example because the carrier's existing EXIF left too little roomNothing was saved. Scrub the carrier first or choose another method
Re-scanned the cleaned file: nothing foundA scan with this tool's reader finds no GPS, XMP or privacy fieldsA sanity check, not a forensic audit; the pixels can still identify people and places
Re-scanned … still found: …Some metadata remained, for example in a format or box this tool does not removeTreat the file as not fully cleaned

Limitations

  • Metadata is visible. Any EXIF viewer can show the field, and this tool's data is base64 text behind a header (or unexplained text with deniability on). It hides the payload from casual viewers, not from someone who looks.
  • A JPEG stores EXIF and XMP in 64 KB segments, so about 49 KB is the practical maximum for JPEG whatever the method; XMP in PNG, WebP and TIFF is the way to hide more.
  • Many social and messenger apps re-encode photos and rewrite metadata. We have not tested individual services, so assume the data may be lost when a photo is posted.
  • GPS Coordinates is limited to 8 bytes, is never encrypted and has no length field, so a shorter message returns zero-padded.
  • Scrub removes metadata, not content. HEIC scrubbing removes the Exif item only. The post-scrub re-check uses this tool's own reader.
  • The Extractor reads this tool's formats. Showing a GPS map contacts OpenStreetMap (only after you click).
  • Not tested: encoders and apps other than this tool's own code and test files, HEIC pixel identity, and files that already carry very large EXIF blocks beyond the single stacking case in our tests.

Privacy

Your image and payload are processed in your browser, in a Web Worker, and are not sent to a StegoToolkit server. The tool saves nothing to disk or to a database: the only things it stores in your browser are your chosen display mode (localStorage) and a flag that you dismissed the mobile tip (sessionStorage). The image, the payload and the password exist only in page and worker memory while you use the tool; starting over or closing the tab discards them. The one deliberate exception is the GPS map: if you click "Load the map from OpenStreetMap", your browser downloads map tiles from openstreetmap.org, which reveals the area (and your IP address) to them; the image file itself is never sent, and nothing is requested until you click. Page views are counted by Vercel Analytics, which is cookieless. Tool events (the method you choose; the file's type and a size range; and how long processing took) are sent to Google Analytics only if the site has it configured and you accepted analytics cookies. The tool does not pass the image, the payload, a password or the filename to analytics, and a filter drops fields with names such as password, payload, data or filename before anything is sent. If you accept cookies, the site may also load advertising and other analytics scripts that are outside this tool's code. As on any website, the host keeps ordinary request logs for loading the page (IP address, URL, browser); because the file is never uploaded, the image, payload and password are not part of any request.

Which Tool Next?

Frequently Asked Questions

What is EXIF steganography?

It hides data in an image's metadata fields (such as UserComment, XMP or the thumbnail) instead of its pixels. The pixels are unchanged: in our tests the image data was byte-identical before and after hiding. The data is visible to anyone who inspects the metadata, so it is a way to carry a payload, not to make it undetectable.

Which method should I use?

UserComment for most messages. XMP for payloads above about 48 KB, but in a PNG, WebP or TIFF (a JPEG cannot hold more than about 49 KB in any EXIF or XMP field). GPS Coordinates only for values of 8 bytes or less. The Capacity table on this page shows the exact limits.

Does a 40-byte message fit?

Yes. A 40-byte message with a password (88 bytes once encrypted) was encoded and read back exactly with UserComment, ImageDescription and MakerNote in JPEG, PNG, WebP, TIFF and HEIC. IPTC Caption holds about 1.4 KB and GPS Coordinates 8 bytes.

Will social media keep my hidden data?

Do not count on it. Many social and messenger apps re-encode photos and rewrite their metadata, so the data is probably lost; we have not tested individual services. Email attachments and the original file from cloud storage are unchanged copies of the file.

Is EXIF steganography detectable?

Yes. Any EXIF viewer can show the fields, and this tool's data is base64 text behind an EXIFsteg:v1 header (or unexplained text if deniability is on). Encryption hides what the message says, not that something is there. No detection rate was measured, so the pages claim none.

What does the Scrub tab remove?

GPS, device and lens details, dates, software and owner names, free-text comments and captions, the embedded thumbnail, XMP and IPTC. It keeps the colour profile and a non-default Orientation. See the table of what is removed in each format. HEIC scrubbing removes the Exif item only. Pixels are not changed, so faces and places in the picture are not removed.

Can I scrub existing metadata before hiding?

Yes. "Scrub before encode" removes the existing metadata and then writes your payload. For JPEG and TIFF you can scrub only the GPS data and keep the rest; for PNG, WebP and HEIC the scrub is complete.

What is the difference between MakerNote and Thumbnail?

MakerNote puts the payload behind a camera-vendor signature (Canon, Nikon, Olympus, Panasonic or FujiFilm) and writes a matching Make and Model; the signature is a prefix only, not a copy of the real layout, so it will not fool a tool that checks the structure. Thumbnail (JPEG only) appends the payload after the end marker of the EXIF thumbnail, so viewers normally ignore the extra bytes (not tested). Both are Forensic-mode methods.

Is my image uploaded?

No. It is processed in your browser. The only network request tied to your file's content is the optional GPS map, which asks OpenStreetMap for map tiles after you click and so reveals the area (not the image). The tool stores only your display mode and a dismissed-tip flag.

Related Tools