Embedding Payloads

The Embed workflow hides text or file data inside an image or WAV carrier. ##

Carrier Options

Images

Stegodon accepts image carriers and writes the output as PNG.

For images, hidden data is embedded into the least significant bits of selected RGB channels.

WAV audio

Stegodon supports PCM WAV files with:

  • 8-bit samples
  • 16-bit samples

For WAV files, hidden data is embedded into least significant bits of audio samples.

Embedding Controls

Bits per channel/sample

SettingMeaning
1Lower capacity, stealthier
2Higher capacity, easier to detect

Image channels

For images only, you can choose any combination of:

  • Red
  • Green
  • Blue

Alpha is not used.

If no image channels are selected in the UI, the code defaults to all three.

Randomize payload placement

When enabled, the payload is not written in simple sequential order.

Instead, Stegodon shuffles the available embedding positions using:

  • a passphrase-derived seed
  • xorshift32
  • Fisher–Yates shuffling

The header itself remains sequential so extraction can discover the file format and options.

AES-GCM encrypt payload

When enabled, the payload is encrypted before embedding.

Encryption uses:

  • AES-GCM
  • PBKDF2 key derivation
  • SHA-256
  • 150,000 iterations
  • 16-byte salt
  • 12-byte IV
  • 256-bit AES key

The salt and IV are stored in the header.

Payload Types

Text

The entered text is UTF-8 encoded and embedded as bytes.

File

The selected file is embedded as raw bytes.

The filename is stored in the Stegodon header and shown again during extraction.

Capacity

Stegodon computes approximate raw capacity.

Image capacity

Capacity depends on:

  • image width and height
  • selected channels
  • chosen LSB depth

Approximate formula:

capacity_bits = number_of_pixels × selected_channels × lsb_count
capacity_bytes = floor(capacity_bits / 8)

WAV capacity

Capacity depends on:

  • sample count
  • bits per sample
  • chosen LSB depth

Approximate formula:

capacity_bits = number_of_samples × lsb_count
capacity_bytes = floor(capacity_bits / 8)

Overhead

Embedded data includes:

  1. a Stegodon header
  2. the payload bytes
  3. optional filename bytes
  4. optional crypto salt and IV

This means your usable payload size is smaller than the raw capacity estimate.

Embedding Process

At a high level, Stegodon does the following:

  1. Gather carrier settings.
  2. Read the payload.
  3. Optionally encrypt the payload.
  4. Build a compact header.
  5. Convert header and payload bytes into LSB-sized symbols.
  6. Write the header sequentially.
  7. Write the payload sequentially or randomized.
  8. Export the result.

Output Preview

During image embedding, Stegodon shows:

  • original preview
  • stego preview

During WAV embedding, Stegodon shows:

  • original audio player
  • stego audio player

It also provides a direct download link.

Common Errors

Payload too large

If the payload plus header exceeds available capacity, Stegodon throws an error.

Missing passphrase

If randomization or encryption is enabled and the passphrase is blank, embedding is blocked.

Unsupported WAV

If the WAV is not PCM 8-bit or 16-bit, embedding will fail.

Best Practices for Embedding

  • Use PNG for images
  • Use WAV PCM for audio
  • Use 1-bit LSB when stealth matters most
  • Use encryption for confidentiality
  • Use randomization for stronger concealment
  • Avoid filling the carrier near maximum capacity unless necessary

Did this page help you?