SVG Steganography Extractor
Extract data hidden inside SVG vector graphic files by this site's five methods. Auto-detect, optional AES-256-GCM decryption. Processed in your browser, not uploaded.
Try the demo instantly
Loads a sample logo SVG with a hidden message already embedded
Drop SVG file here, or click to browse
Supports: .svg (any valid SVG/XML file) · Max 20 MB
Processed in your browser
Your SVG is processed in this browser tab and not sent to a server. Usage statistics may record which options were used, never your file.
How the Decoder Works (4 steps)
- Upload the SVG file that may contain a hidden payload
- Select the detection method (or use Auto to scan all methods)
- Enter a password if the payload was encrypted during encoding
- Click Decode — the hidden message or file will be extracted below
SVG Detection Methods: Auto Detect and Five Embedding Methods
| Method | Technique | Visibility and survival | Best For |
|---|---|---|---|
| Auto Detect | Tries the five methods in order: comment, metadata, data attributes, colour, coordinates | Stops at the first valid payload; checks the five formats the Hider writes at the default seed | SVGs from the Hider |
| XML Comment | Reads the base64 text in an <!--STGDATA:…--> comment | Visible in source; removed by SVGO defaults in the tested files | Quick extraction |
| Metadata | Reads the <metadata id="stgmeta"> element (not <desc>) | Visible in source; removed by SVGO defaults in the tested files | Standard use |
| Data Attributes | Joins the data-stg-N attributes in order | Visible in source; survived SVGO defaults in both tested files | Web dev SVGs |
| Float Coord LSB | Reads the 4th decimal digit of path coordinates (odd or even) | Changes existing numbers; lost in the tested SVGO run | Path-heavy SVGs |
| Color RGB LSB | Reads the last bit of each R, G, B byte of fill/stroke #rrggbb | Changes existing colour values; read back after SVGO on one tested fixture, lost on another (SVGO shortens some colours) | Illustration SVGs |
What the SVG Extractor Reads
This Extractor reads the five formats the SVG Hider on this site writes: an XML comment, a metadata element, data-stg-N attributes, the last bit of the colour bytes in fill and stroke values, and the fourth decimal digit of path coordinates. Auto Detect tries them in that order and returns the first valid payload. It does not read data hidden by other tools or other layouts, and it cannot tell you that an SVG is clean, only that none of these five formats was found.
A payload counts as found when it starts with a valid 8-byte frame: the letters SGFS followed by a length that is at most 50 MiB and fits in the bytes present. That recognises the format; it does not verify the message. An unencrypted message whose bytes were changed afterwards is still returned as it now reads (tested: one changed byte came back changed), while a changed encrypted payload fails AES-GCM authentication when it is decrypted. If Reed-Solomon protection is present (the data starts with its header), the decoder attempts error correction before AES-GCM decryption; otherwise that step is skipped.
Passwords: type the password the Hider was given. A wrong password, a password typed for a file that was never encrypted, and a damaged encrypted payload all give the same failure. A payload hidden with the older single-payload Plausible Deniability option, with a bit-order seed other than the default, or with the two-layer scheme is not found by Auto Detect on purpose; use the manual controls (seed field and single-payload switch in Standard and Forensic mode, the two-layer panel in Forensic mode).
What Auto Detect Looks For
| Order | Method | What it looks for | How a find is confirmed |
|---|---|---|---|
| 1 | XML Comment | <!--STGDATA:…--> with base64 inside (the newest one if there are several) | Base64 decodes to a frame with the SGFS letters and a length that fits |
| 2 | Metadata | <metadata id="stgmeta"> containing base64 | Same frame check |
| 3 | Data attributes | data-stg-N attributes on shape, group, text and image elements, joined in index order | Same frame check |
| 4 | Color RGB LSB | The last bit of each fill and stroke #rrggbb byte, from the first colour | The first 64 bits must form a valid 8-byte frame header |
| 5 | Float coordinate LSB | Whether the fourth decimal digit of each d="…" number is odd or even, from the first number | The first 64 bits must form a valid 8-byte frame header |
What Survives SVGO (Default Settings)
Measured with SVGO 3.3.2, default preset, on two generated 120-path files (`npm run test:measure:svg-svgo`, needs SVGO installed outside the repo): an illustration with cubic paths, 4-decimal coordinates and many different #rrggbb colours, and a flat icon with integer or half-step coordinates and a palette of ten colours. A 13-byte message was hidden with each method, the file was optimized, and the Extractor's Auto Detect was run on the result. Two files, one SVGO version and one configuration: treat it as an indication.
| Method | Illustration (120 paths) | Flat icon (10 colours) | Why |
|---|---|---|---|
| XML Comment | Lost | Lost | SVGO removes comments |
| Metadata | Lost | Lost | SVGO removes the <metadata> element |
| Data attributes | Survived | Survived | SVGO keeps data-* attributes |
| Color RGB LSB | Survived | Lost | SVGO shortens colours such as #aabbcc to #abc, which drops the hidden bits |
| Float coordinate LSB | Lost | Not possible | SVGO rounds coordinates (and the flat icon has no 4-decimal numbers) |
Examples
Input: An SVG made by the Hider with the message "Meet at the old bridge at 9pm." in Metadata, no password
Result: Auto Detect finds the <metadata id="stgmeta"> element and shows the 30 bytes of text (30 characters), method metadata, data type text.
Meaning: The scan panel before decoding shows the same: Metadata found, the other four not found or not applicable.
Input: The same message hidden with a password, extracted with no password, then with the wrong one
Result: With no password Auto Detect finds the payload and shows 78 bytes of encrypted-looking data (30 message bytes plus 48 for the password wrapper). With a wrong password the Extractor reports "No hidden data found" even though the payload is there, because the failed decryption is not told apart from a missing payload.
Meaning: The wrong-password message does not say which of the three causes applies (wrong password, damaged data, or no hidden data). Enter the correct password to read the text.
Input: A file hidden in two redundant layers (Metadata and Color RGB LSB, chosen together in the Hider's Forensic mode; this is not Plausible Deniability) after someone deleted the <metadata> element
Result: Auto Detect skips Metadata, finds the Color RGB LSB layer and returns the full message, method color-lsb. (With both layers still present it returns the Metadata copy, because it stops at the first valid payload.)
Meaning: That is the point of selecting two or more layers: each one carries the whole message.
Input: A clean 100-path SVG that was never encoded
Result: The scan panel lists all five methods as not found (Color and Float are checked, not applicable only when the file has fewer than 64 usable slots) and Auto Detect reports that nothing was found.
Meaning: Not found means this tool did not recognise any of the five formats its Hider writes, at the default seed. It does not prove the SVG contains no hidden data: other tools, unsupported layouts, non-default seeds and Plausible Deniability payloads need manual settings or Forensic mode.
How the SVG Extractor Works
Read the SVG as text
The file is read in your browser. Comments, CDATA sections and script/style text are ignored when counting colour and coordinate slots, as the Hider does.
Scan the five formats
The scan panel runs the same checks as Auto Detect without a password: a valid frame in the comment, metadata or attributes, or a valid 64-bit header in the colour or coordinate bits.
Read the frame
A valid frame gives the stored length. The bytes are cut to that length.
Repair and decrypt
If Reed-Solomon protection is present, error correction is attempted first; then, only if you typed a password, AES-256-GCM decryption is attempted. A password typed for a payload that was never encrypted makes the decode fail.
Interpret
The result is classified as text, a file with a known signature, encrypted-looking data or unrecognised bytes, and capture-the-flag shaped text is highlighted.
Download or compare
Copy the text or download the bytes. The download is named after the SVG with _extracted and the detected file extension, or .bin; a hidden file's own name is not stored.
What the results mean
| Result | What it means | What to do |
|---|---|---|
| Green extraction summary | A valid payload was found and processed successfully (decrypted if it was encrypted and the password was right). The summary shows the method, the data type and whether Reed-Solomon error correction was applied. | Read or download the result. |
| Encrypted data shown, no text | The payload is there but looks encrypted and you typed no password. | Enter the password and decode again. |
| Unrecognised data | A frame was found but the bytes are neither readable text nor a known file type. | It may be a file with no signature, or from a different encoding; open View Raw Bytes on the result. |
| An error after decoding | No valid payload was found by the chosen method (or by any of the five in Auto Detect), the encrypted payload was damaged, the password was wrong, or a password was typed for a file that was not encrypted. In Auto Detect all of these give the same message, “No hidden data found”, which does not say whether a payload was present. Choosing a single method gives a differently worded message that names that method and lists a wrong password or a different encoding method as causes; it still cannot tell a wrong password from missing or damaged data. | Try Auto Detect, check the password, leave it empty if unsure, and check the bit-order seed for Color RGB or Float coordinate payloads (Standard and Forensic mode). |
| Scan panel: found | A valid frame or header is present for that method. | Use the Decode using button for it. |
| Scan panel: not found / not applicable | No valid frame or header was detected at the default seed; not applicable means: for Color RGB LSB or Float coordinate LSB, fewer than 64 usable colour bytes or coordinates; for Data attributes, none of the elements that can carry them (path, rect, circle, ellipse, line, polygon, polyline, g, text, image). Comment and Metadata are always checked. | A payload with another seed or Plausible Deniability will not show here. |
Limitations
- Three different limits apply: the SVG you upload must be 20 MB or smaller; the decoder rejects any frame that declares more than 50 MiB (52,428,800 bytes) of payload, or more bytes than the SVG's hidden data actually contains, even when the file is within the 20 MB limit (50 MiB is a validation ceiling, not a promise that a payload that large fits in an SVG); and what the Hider can store is smaller still (2 MiB each for Comment and Metadata, less for the other methods, depending on the file).
- Auto Detect checks the five standard formats written by this site's Hider, at the default seed. A non-default bit-order seed or the Hider's Plausible Deniability options need manual settings (the seed field and the single-layer deniability switch appear in Standard and Forensic mode; the two-layer decode panel in Forensic mode). Data hidden by other tools, or in layouts this tool does not write, is not recognised.
- The default scan uses seed 0 for the colour and coordinate methods; a message hidden with another bit-order seed needs that seed entered in Standard or Forensic mode.
- An unencrypted payload is checked only by its length frame, so a changed message can be returned without a warning; encrypted payloads fail authentication instead.
- Optimizers and editors can remove or change the data before you get the file; only SVGO 3.3.2 with default settings was tested, on two generated files.
- Gzipped .svgz files are not supported and files above 20 MB are refused.
- A hidden file's name is not stored, so the download uses the SVG's name with a detected extension or .bin.
- Key-derivation time on phones was not measured.
Privacy
The SVG is read and decoded in your browser tab (a Web Worker and the Web Crypto API) and is not uploaded. Usage statistics may record which options were used, never the SVG, the extracted data or the password. The hosting provider keeps ordinary request logs for page loads.
Which Tool Next?
- Strings Extractor (CTF Lab) — lists readable text in any file, including an SVG of unknown origin.
- SVG Steganography Hider — hide a message in an SVG with the same five methods.
- PDF Steganography Extractor — for documents instead of vector graphics.
- Image Steganography Extractor — for PNG, BMP, WebP and JPG pictures.
- Text Steganography Extractor — for plain text with look-alike characters or whitespace.
- Whitespace Steganography Extractor — for text files with trailing spaces, tabs or line endings.
Frequently Asked Questions
Can I use this for an SVG steganography CTF challenge?
Only if the challenge file was made with this tool's own formats. The Extractor looks for exactly five things: the <!--STGDATA:…--> comment, the <metadata id="stgmeta"> element, data-stg-N attributes, and the framed bit patterns in colour and coordinate values. A plain comment such as <!-- flag{…} -->, a custom data-* attribute or a base64 string without this tool's 8-byte frame is not read, so the result is empty even though text is hidden there. For a challenge SVG of unknown origin, open the file as text first (it is XML), look through the comments, <metadata>, <desc>, <title>, data-* attributes and long attribute values, and try the Strings Extractor in the CTF Lab for readable strings.
What can be hidden inside an SVG file?
An SVG is a text file, so a message can sit in a comment, in metadata, in an attribute, or in the numbers of a path or colour. This tool writes its data in those five places and nowhere else (the Hider page lists exactly what changes). Anything outside them, for example text drawn off-screen or an extra element added by another program, is not looked for here.
Is my SVG uploaded to a server?
No. Decoding happens in your browser tab; the file is not sent to a server. Usage statistics may record which options were used, never your file.
Which method should I try first?
Auto Detect. It tries the five methods in order (comment, metadata, data attributes, colour LSB, coordinate LSB) and returns the first valid payload. Pick a specific method only if you know how the SVG was encoded. It reads only the formats this site's Hider writes: data hidden by other tools is not recognised.
Why is the output garbled, or why does it say wrong password?
A payload that was encrypted shows as unreadable binary until you enter the password. With a password typed, a wrong one and a damaged payload give the same failure (AES-GCM authentication), and so does a password typed for a file that was never encrypted. Try again without a password if you are not sure.
Can I extract files, not just text?
Yes. A hidden file is offered as a download. Its original name is not stored in the SVG: the extension comes from the file's signature when it is recognised, otherwise the download is a .bin.
Will Float Coord LSB work on every SVG?
Only if the SVG has path coordinates with at least four decimal places inside d="" attributes: each such number holds one bit. Icons with integer or two-decimal coordinates have no room.
Can it read the Plausible Deniability layers?
Yes, in Forensic mode: the two-layer section reads the plain decoy without a password and the real payload with the passphrase; the older single-payload option needs its toggle and the passphrase. Normal Auto Detect deliberately finds neither.
Related Tools
SVG Steganography Hider
Hide data in vector graphics using 5 XML-native embedding methods (comment, metadata, data attributes, float-coordinate LSB, colour LSB). Optional AES-256-GCM. Processed in your browser, not uploaded.
Image Steganography Extractor
Extract hidden messages from steganographic image files. Auto-detect mode, bit plane analysis.
Steganography Detector
Statistical steganalysis with three published tests — chi-square, RS analysis and Sample Pairs — fused into one score and checked against the real StegExpose on a small test set. Payload size estimate. Method fingerprint. WAV audio support. Processed in your browser, not uploaded.