1131 lines
25 KiB
Markdown
1131 lines
25 KiB
Markdown
# Stegasoo CLI Documentation (v3.2.0)
|
||
|
||
Complete command-line interface reference for Stegasoo steganography operations.
|
||
|
||
## Table of Contents
|
||
|
||
- [Installation](#installation)
|
||
- [What's New in v3.2.0](#whats-new-in-v320)
|
||
- [Quick Start](#quick-start)
|
||
- [Commands](#commands)
|
||
- [generate](#generate-command)
|
||
- [encode](#encode-command)
|
||
- [decode](#decode-command)
|
||
- [verify](#verify-command)
|
||
- [info](#info-command)
|
||
- [compare](#compare-command)
|
||
- [modes](#modes-command)
|
||
- [strip-metadata](#strip-metadata-command)
|
||
- [Embedding Modes](#embedding-modes)
|
||
- [Security Factors](#security-factors)
|
||
- [Workflow Examples](#workflow-examples)
|
||
- [Piping & Scripting](#piping--scripting)
|
||
- [Error Handling](#error-handling)
|
||
- [Exit Codes](#exit-codes)
|
||
|
||
---
|
||
|
||
## Installation
|
||
|
||
### From PyPI
|
||
|
||
```bash
|
||
# CLI only
|
||
pip install stegasoo[cli]
|
||
|
||
# CLI with DCT support
|
||
pip install stegasoo[cli,dct]
|
||
|
||
# With all extras
|
||
pip install stegasoo[all]
|
||
```
|
||
|
||
### From Source
|
||
|
||
```bash
|
||
git clone https://github.com/example/stegasoo.git
|
||
cd stegasoo
|
||
pip install -e ".[cli,dct]"
|
||
```
|
||
|
||
### Verify Installation
|
||
|
||
```bash
|
||
stegasoo --version
|
||
stegasoo --help
|
||
|
||
# Check DCT support
|
||
python -c "from stegasoo import has_dct_support; print('DCT:', 'available' if has_dct_support() else 'requires scipy')"
|
||
```
|
||
|
||
---
|
||
|
||
## What's New in v3.2.0
|
||
|
||
Version 3.2.0 brings major simplifications to the authentication system:
|
||
|
||
| Change | Before (v3.1) | After (v3.2.0) |
|
||
|--------|---------------|----------------|
|
||
| Passphrase | Daily rotation (7 phrases) | Single passphrase |
|
||
| Date parameter | Required for encode/decode | Removed entirely |
|
||
| Default words | 3 words per phrase | 4 words |
|
||
| Terminology | `day_phrase`, `phrase` | `passphrase` |
|
||
|
||
**Key benefits:**
|
||
- ✅ No need to remember which day a message was encoded
|
||
- ✅ True asynchronous communication
|
||
- ✅ Simpler credential management
|
||
- ✅ Stronger default security (4 words = ~44 bits entropy)
|
||
|
||
**Migration:** Old stego images encoded with v3.1.x cannot be decoded with v3.2.0 due to the removed date-based key derivation. Keep v3.1.x installed if you need to access old images.
|
||
|
||
---
|
||
|
||
## Quick Start
|
||
|
||
```bash
|
||
# 1. Generate credentials (do this once, memorize results)
|
||
stegasoo generate
|
||
|
||
# 2. Encode a message (LSB mode - default)
|
||
stegasoo encode \
|
||
--ref secret_photo.jpg \
|
||
--carrier meme.png \
|
||
--passphrase "apple forest thunder mountain" \
|
||
--pin 123456 \
|
||
--message "Meet at midnight"
|
||
|
||
# 3. Encode for social media (DCT mode)
|
||
stegasoo encode \
|
||
--ref secret_photo.jpg \
|
||
--carrier meme.png \
|
||
--passphrase "apple forest thunder mountain" \
|
||
--pin 123456 \
|
||
--message "Meet at midnight" \
|
||
--mode dct \
|
||
--dct-format jpeg
|
||
|
||
# 4. Decode a message (auto-detects mode)
|
||
stegasoo decode \
|
||
--ref secret_photo.jpg \
|
||
--stego stego_abc123.png \
|
||
--passphrase "apple forest thunder mountain" \
|
||
--pin 123456
|
||
```
|
||
|
||
---
|
||
|
||
## Commands
|
||
|
||
### Generate Command
|
||
|
||
Generate credentials for encoding/decoding operations. Creates a passphrase and optionally a PIN and/or RSA key.
|
||
|
||
#### Synopsis
|
||
|
||
```bash
|
||
stegasoo generate [OPTIONS]
|
||
```
|
||
|
||
#### Options
|
||
|
||
| Option | Short | Type | Default | Description |
|
||
|--------|-------|------|---------|-------------|
|
||
| `--pin/--no-pin` | | flag | `--pin` | Generate a PIN |
|
||
| `--rsa/--no-rsa` | | flag | `--no-rsa` | Generate an RSA key |
|
||
| `--pin-length` | | 6-9 | 6 | PIN length in digits |
|
||
| `--rsa-bits` | | choice | 2048 | RSA key size (2048, 3072, 4096) |
|
||
| `--words` | | 3-12 | 4 | Words in passphrase (v3.2.0: default increased to 4) |
|
||
| `--output` | `-o` | path | | Save RSA key to file |
|
||
| `--password` | `-p` | string | | Password for RSA key file |
|
||
| `--json` | | flag | | Output as JSON |
|
||
|
||
#### Examples
|
||
|
||
**Basic generation with PIN (default):**
|
||
```bash
|
||
stegasoo generate
|
||
```
|
||
|
||
Output:
|
||
```
|
||
============================================================
|
||
STEGASOO CREDENTIALS (v3.2.0)
|
||
============================================================
|
||
|
||
⚠️ MEMORIZE THESE AND CLOSE THIS WINDOW
|
||
Do not screenshot or save to file!
|
||
|
||
─── STATIC PIN ───
|
||
847293
|
||
|
||
─── PASSPHRASE ───
|
||
abandon ability able about
|
||
|
||
─── SECURITY ───
|
||
Passphrase entropy: 44 bits (4 words)
|
||
PIN entropy: 19 bits
|
||
Combined: 63 bits
|
||
+ photo entropy: 80-256 bits
|
||
|
||
✓ v3.2.0: Use this passphrase anytime - no date needed!
|
||
```
|
||
|
||
**Generate with more words for higher security:**
|
||
```bash
|
||
stegasoo generate --words 6
|
||
```
|
||
|
||
**Generate with RSA key:**
|
||
```bash
|
||
stegasoo generate --rsa --rsa-bits 4096
|
||
```
|
||
|
||
**Save RSA key to encrypted file:**
|
||
```bash
|
||
stegasoo generate --rsa -o mykey.pem -p "mysecretpassword"
|
||
```
|
||
|
||
**Maximum security (longer passphrase + both factors):**
|
||
```bash
|
||
stegasoo generate --pin --rsa --words 6 --pin-length 9
|
||
```
|
||
|
||
**JSON output for scripting:**
|
||
```bash
|
||
stegasoo generate --json
|
||
```
|
||
|
||
Output:
|
||
```json
|
||
{
|
||
"passphrase": "abandon ability able about",
|
||
"pin": "847293",
|
||
"rsa_key": null,
|
||
"entropy": {
|
||
"passphrase": 44,
|
||
"pin": 19,
|
||
"rsa": 0,
|
||
"total": 63
|
||
}
|
||
}
|
||
```
|
||
|
||
**Extract passphrase from JSON:**
|
||
```bash
|
||
stegasoo generate --json | jq -r '.passphrase'
|
||
```
|
||
|
||
**RSA only (no PIN):**
|
||
```bash
|
||
stegasoo generate --no-pin --rsa -o key.pem -p "password123"
|
||
```
|
||
|
||
---
|
||
|
||
### Encode Command
|
||
|
||
Encode a secret message or file into an image using steganography.
|
||
|
||
#### Synopsis
|
||
|
||
```bash
|
||
stegasoo encode [OPTIONS]
|
||
```
|
||
|
||
#### Options
|
||
|
||
| Option | Short | Type | Required | Default | Description |
|
||
|--------|-------|------|----------|---------|-------------|
|
||
| `--ref` | `-r` | path | ✓ | | Reference photo (shared secret) |
|
||
| `--carrier` | `-c` | path | ✓ | | Carrier image to hide message in |
|
||
| `--passphrase` | `-p` | string | ✓ | | Passphrase (v3.2.0: single, no date needed) |
|
||
| `--message` | `-m` | string | | | Message to encode |
|
||
| `--message-file` | `-f` | path | | | Read message from file |
|
||
| `--embed-file` | `-e` | path | | | Embed a binary file |
|
||
| `--pin` | | string | * | | Static PIN (6-9 digits) |
|
||
| `--key` | `-k` | path | * | | RSA key file |
|
||
| `--key-qr` | | path | * | | RSA key from QR code image |
|
||
| `--key-password` | | string | | | Password for RSA key |
|
||
| `--output` | `-o` | path | | | Output filename |
|
||
| `--mode` | | choice | | `lsb` | Embedding mode: `lsb` or `dct` |
|
||
| `--dct-format` | | choice | | `png` | DCT output: `png` or `jpeg` |
|
||
| `--dct-color` | | choice | | `grayscale` | DCT color: `grayscale` or `color` |
|
||
| `--quiet` | `-q` | flag | | | Suppress output |
|
||
|
||
\* At least one of `--pin`, `--key`, or `--key-qr` is required.
|
||
|
||
#### Message Input Methods
|
||
|
||
1. **Command line argument:**
|
||
```bash
|
||
stegasoo encode -r ref.jpg -c carrier.png -p "four word passphrase" --pin 123456 -m "Secret message"
|
||
```
|
||
|
||
2. **From file:**
|
||
```bash
|
||
stegasoo encode -r ref.jpg -c carrier.png -p "four word passphrase" --pin 123456 -f message.txt
|
||
```
|
||
|
||
3. **From stdin (pipe):**
|
||
```bash
|
||
echo "Secret message" | stegasoo encode -r ref.jpg -c carrier.png -p "four word passphrase" --pin 123456
|
||
```
|
||
|
||
4. **Embed binary file:**
|
||
```bash
|
||
stegasoo encode -r ref.jpg -c carrier.png -p "four word passphrase" --pin 123456 -e secret.pdf
|
||
```
|
||
|
||
#### Examples
|
||
|
||
**Basic encoding with PIN (LSB mode - default):**
|
||
```bash
|
||
stegasoo encode \
|
||
--ref photos/vacation.jpg \
|
||
--carrier memes/funny_cat.png \
|
||
--passphrase "correct horse battery staple" \
|
||
--pin 847293 \
|
||
--message "The package arrives Tuesday"
|
||
```
|
||
|
||
Output:
|
||
```
|
||
Mode: LSB (12.4% capacity)
|
||
✓ Encoded successfully!
|
||
Output: a1b2c3d4.png
|
||
Size: 245,832 bytes
|
||
Capacity used: 12.4%
|
||
```
|
||
|
||
**DCT mode for social media (JPEG output):**
|
||
```bash
|
||
stegasoo encode \
|
||
--ref photos/vacation.jpg \
|
||
--carrier memes/funny_cat.png \
|
||
--passphrase "correct horse battery staple" \
|
||
--pin 847293 \
|
||
--message "The package arrives Tuesday" \
|
||
--mode dct \
|
||
--dct-format jpeg
|
||
```
|
||
|
||
Output:
|
||
```
|
||
Mode: DCT (grayscale, JPEG) (45.2% capacity)
|
||
✓ Encoded successfully!
|
||
Output: a1b2c3d4.jpg
|
||
Size: 89,432 bytes
|
||
Capacity used: 45.2%
|
||
DCT output: JPEG (grayscale)
|
||
```
|
||
|
||
**DCT mode with color preservation:**
|
||
```bash
|
||
stegasoo encode \
|
||
-r ref.jpg \
|
||
-c carrier.png \
|
||
-p "phrase words here now" \
|
||
--pin 123456 \
|
||
-m "Message" \
|
||
--mode dct \
|
||
--dct-color color \
|
||
--dct-format png
|
||
```
|
||
|
||
**With RSA key:**
|
||
```bash
|
||
stegasoo encode \
|
||
-r reference.jpg \
|
||
-c carrier.png \
|
||
-p "apple forest thunder mountain" \
|
||
-k mykey.pem \
|
||
--key-password "secretpassword" \
|
||
-m "Encrypted with RSA"
|
||
```
|
||
|
||
**Both PIN and RSA (maximum security):**
|
||
```bash
|
||
stegasoo encode \
|
||
-r ref.jpg \
|
||
-c carrier.png \
|
||
-p "word1 word2 word3 word4" \
|
||
--pin 123456 \
|
||
-k mykey.pem \
|
||
--key-password "pass" \
|
||
-m "Double-locked message"
|
||
```
|
||
|
||
**Custom output filename:**
|
||
```bash
|
||
stegasoo encode \
|
||
-r ref.jpg \
|
||
-c carrier.png \
|
||
-p "phrase words here now" \
|
||
--pin 123456 \
|
||
-m "Message" \
|
||
-o holiday_photo.png
|
||
```
|
||
|
||
**Embed a binary file:**
|
||
```bash
|
||
stegasoo encode \
|
||
-r ref.jpg \
|
||
-c large_image.png \
|
||
-p "secure phrase words here" \
|
||
--pin 123456 \
|
||
-e secret_document.pdf \
|
||
-o output.png
|
||
```
|
||
|
||
**Quiet mode for scripting:**
|
||
```bash
|
||
stegasoo encode -r ref.jpg -c carrier.png -p "phrase" --pin 123456 -m "msg" -q -o out.png
|
||
# No output, just creates the file
|
||
```
|
||
|
||
---
|
||
|
||
### Decode Command
|
||
|
||
Decode a secret message or file from a stego image. **Automatically detects LSB vs DCT mode.**
|
||
|
||
#### Synopsis
|
||
|
||
```bash
|
||
stegasoo decode [OPTIONS]
|
||
```
|
||
|
||
#### Options
|
||
|
||
| Option | Short | Type | Required | Description |
|
||
|--------|-------|------|----------|-------------|
|
||
| `--ref` | `-r` | path | ✓ | Reference photo (same as encoding) |
|
||
| `--stego` | `-s` | path | ✓ | Stego image to decode |
|
||
| `--passphrase` | `-p` | string | ✓ | Passphrase used for encoding |
|
||
| `--pin` | | string | * | Static PIN |
|
||
| `--key` | `-k` | path | * | RSA key file |
|
||
| `--key-qr` | | path | * | RSA key from QR code image |
|
||
| `--key-password` | | string | | Password for RSA key |
|
||
| `--output` | `-o` | path | | Save message to file |
|
||
| `--mode` | | choice | | Extraction mode: `auto`, `lsb`, or `dct` |
|
||
| `--quiet` | `-q` | flag | | Output only the message |
|
||
| `--force` | | flag | | Overwrite existing output file |
|
||
|
||
\* Must provide the same security factors used during encoding.
|
||
|
||
#### Examples
|
||
|
||
**Basic decoding with PIN:**
|
||
```bash
|
||
stegasoo decode \
|
||
--ref photos/vacation.jpg \
|
||
--stego received_image.png \
|
||
--passphrase "correct horse battery staple" \
|
||
--pin 847293
|
||
```
|
||
|
||
Output:
|
||
```
|
||
✓ Decoded successfully!
|
||
|
||
The package arrives Tuesday
|
||
```
|
||
|
||
**Decoding DCT image (auto-detected):**
|
||
```bash
|
||
stegasoo decode \
|
||
--ref photos/vacation.jpg \
|
||
--stego received_image.jpg \
|
||
--passphrase "correct horse battery staple" \
|
||
--pin 847293
|
||
```
|
||
|
||
**With RSA key:**
|
||
```bash
|
||
stegasoo decode \
|
||
-r reference.jpg \
|
||
-s stego_image.png \
|
||
-p "apple forest thunder mountain" \
|
||
-k mykey.pem \
|
||
--key-password "secretpassword"
|
||
```
|
||
|
||
**Save decoded message to file:**
|
||
```bash
|
||
stegasoo decode \
|
||
-r ref.jpg \
|
||
-s stego.png \
|
||
-p "passphrase words here now" \
|
||
--pin 123456 \
|
||
-o decoded_message.txt
|
||
```
|
||
|
||
Output:
|
||
```
|
||
✓ Decoded successfully!
|
||
Saved to: decoded_message.txt
|
||
```
|
||
|
||
**Quiet mode (message only):**
|
||
```bash
|
||
stegasoo decode -r ref.jpg -s stego.png -p "phrase" --pin 123456 -q
|
||
```
|
||
|
||
Output:
|
||
```
|
||
The package arrives Tuesday
|
||
```
|
||
|
||
**Pipe to another command:**
|
||
```bash
|
||
stegasoo decode -r ref.jpg -s stego.png -p "phrase" --pin 123456 -q | gpg --decrypt
|
||
```
|
||
|
||
**Force specific extraction mode:**
|
||
```bash
|
||
stegasoo decode -r ref.jpg -s stego.png -p "phrase" --pin 123456 --mode dct
|
||
```
|
||
|
||
---
|
||
|
||
### Verify Command
|
||
|
||
Verify that a stego image can be decoded without extracting the actual message content.
|
||
|
||
#### Synopsis
|
||
|
||
```bash
|
||
stegasoo verify [OPTIONS]
|
||
```
|
||
|
||
#### Options
|
||
|
||
| Option | Short | Type | Required | Description |
|
||
|--------|-------|------|----------|-------------|
|
||
| `--ref` | `-r` | path | ✓ | Reference photo |
|
||
| `--stego` | `-s` | path | ✓ | Stego image to verify |
|
||
| `--passphrase` | `-p` | string | ✓ | Passphrase |
|
||
| `--pin` | | string | * | Static PIN |
|
||
| `--key` | `-k` | path | * | RSA key file |
|
||
| `--key-qr` | | path | * | RSA key from QR code |
|
||
| `--key-password` | | string | | Password for RSA key |
|
||
| `--mode` | | choice | | Extraction mode: `auto`, `lsb`, or `dct` |
|
||
| `--json` | | flag | | Output as JSON |
|
||
|
||
#### Examples
|
||
|
||
**Basic verification:**
|
||
```bash
|
||
stegasoo verify -r photo.jpg -s stego.png -p "my passphrase here" --pin 123456
|
||
```
|
||
|
||
Output:
|
||
```
|
||
✓ Valid stego image
|
||
Payload: text (142 bytes)
|
||
Size: 142 bytes
|
||
```
|
||
|
||
**JSON output:**
|
||
```bash
|
||
stegasoo verify -r photo.jpg -s stego.png -p "words here" --pin 123456 --json
|
||
```
|
||
|
||
Output:
|
||
```json
|
||
{
|
||
"valid": true,
|
||
"stego_file": "stego.png",
|
||
"payload_type": "text",
|
||
"payload_size": 142
|
||
}
|
||
```
|
||
|
||
**Failed verification:**
|
||
```bash
|
||
stegasoo verify -r photo.jpg -s stego.png -p "wrong passphrase" --pin 123456
|
||
```
|
||
|
||
Output:
|
||
```
|
||
✗ Verification failed
|
||
Error: Decryption failed: Invalid authentication tag
|
||
```
|
||
|
||
---
|
||
|
||
### Info Command
|
||
|
||
Display information about an image's capacity for both LSB and DCT modes.
|
||
|
||
#### Synopsis
|
||
|
||
```bash
|
||
stegasoo info IMAGE [OPTIONS]
|
||
```
|
||
|
||
#### Options
|
||
|
||
| Option | Type | Description |
|
||
|--------|------|-------------|
|
||
| `--json` | flag | Output as JSON |
|
||
|
||
#### Examples
|
||
|
||
**Check carrier image capacity:**
|
||
```bash
|
||
stegasoo info vacation_photo.png
|
||
```
|
||
|
||
Output:
|
||
```
|
||
Image: vacation_photo.png
|
||
Dimensions: 1920 × 1080
|
||
Pixels: 2,073,600
|
||
Mode: RGB
|
||
Format: PNG
|
||
|
||
Capacity:
|
||
LSB mode: ~776,970 bytes (758.8 KB)
|
||
DCT mode: ~64,800 bytes (63.3 KB) ✓
|
||
DCT ratio: 8.3% of LSB
|
||
DCT options: grayscale/color, png/jpeg
|
||
```
|
||
|
||
**JSON output:**
|
||
```bash
|
||
stegasoo info photo.png --json
|
||
```
|
||
|
||
Output:
|
||
```json
|
||
{
|
||
"file": "photo.png",
|
||
"width": 1920,
|
||
"height": 1080,
|
||
"pixels": 2073600,
|
||
"mode": "RGB",
|
||
"format": "PNG",
|
||
"capacity": {
|
||
"lsb": {
|
||
"bytes": 776970,
|
||
"kb": 758.8
|
||
},
|
||
"dct": {
|
||
"bytes": 64800,
|
||
"kb": 63.3,
|
||
"available": true,
|
||
"ratio_vs_lsb": 8.3,
|
||
"output_formats": ["png", "jpeg"],
|
||
"color_modes": ["grayscale", "color"]
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### Compare Command
|
||
|
||
Compare LSB and DCT embedding modes for an image with recommendations.
|
||
|
||
#### Synopsis
|
||
|
||
```bash
|
||
stegasoo compare IMAGE [OPTIONS]
|
||
```
|
||
|
||
#### Options
|
||
|
||
| Option | Short | Type | Description |
|
||
|--------|-------|------|-------------|
|
||
| `--payload-size` | `-s` | int | Check if specific payload size fits |
|
||
| `--json` | | flag | Output as JSON |
|
||
|
||
#### Examples
|
||
|
||
**Basic comparison:**
|
||
```bash
|
||
stegasoo compare carrier.png
|
||
```
|
||
|
||
Output:
|
||
```
|
||
=== Mode Comparison: carrier.png ===
|
||
Dimensions: 1920 × 1080
|
||
|
||
┌─── LSB Mode ───
|
||
│ Capacity: 776,970 bytes (758.8 KB)
|
||
│ Output: PNG
|
||
│ Status: ✓ Available
|
||
│
|
||
├─── DCT Mode ───
|
||
│ Capacity: 64,800 bytes (63.3 KB)
|
||
│ Ratio: 8.3% of LSB capacity
|
||
│ Status: ✓ Available
|
||
│ Formats: PNG (lossless), JPEG (smaller)
|
||
│ Colors: Grayscale (default), Color
|
||
│
|
||
└─── Recommendation ───
|
||
LSB for larger payloads, DCT for better stealth
|
||
DCT supports color output with --dct-color color
|
||
```
|
||
|
||
**Check if payload fits:**
|
||
```bash
|
||
stegasoo compare carrier.png --payload-size 50000
|
||
```
|
||
|
||
Output:
|
||
```
|
||
=== Mode Comparison: carrier.png ===
|
||
Dimensions: 1920 × 1080
|
||
|
||
┌─── LSB Mode ───
|
||
│ Capacity: 776,970 bytes (758.8 KB)
|
||
│ Output: PNG
|
||
│ Status: ✓ Available
|
||
│
|
||
├─── DCT Mode ───
|
||
│ Capacity: 64,800 bytes (63.3 KB)
|
||
│ Ratio: 8.3% of LSB capacity
|
||
│ Status: ✓ Available
|
||
│ Formats: PNG (lossless), JPEG (smaller)
|
||
│ Colors: Grayscale (default), Color
|
||
│
|
||
├─── Payload Check ───
|
||
│ Size: 50,000 bytes
|
||
│ LSB mode: ✓ Fits
|
||
│ DCT mode: ✓ Fits
|
||
│
|
||
└─── Recommendation ───
|
||
DCT mode for better stealth (payload fits both modes)
|
||
Use --dct-color color to preserve original colors
|
||
```
|
||
|
||
---
|
||
|
||
### Modes Command
|
||
|
||
Show available embedding modes and their status.
|
||
|
||
#### Synopsis
|
||
|
||
```bash
|
||
stegasoo modes
|
||
```
|
||
|
||
#### Example Output
|
||
|
||
```
|
||
=== Stegasoo Embedding Modes (v3.2.0) ===
|
||
|
||
LSB Mode (Spatial LSB)
|
||
Status: ✓ Always available
|
||
Output: PNG/BMP (full color)
|
||
Capacity: ~375 KB per megapixel
|
||
Use case: Larger payloads, color preservation
|
||
CLI flag: --mode lsb (default)
|
||
|
||
DCT Mode (Frequency Domain)
|
||
Status: ✓ Available
|
||
Capacity: ~75 KB per megapixel (~20% of LSB)
|
||
Use case: Better stealth, frequency domain hiding
|
||
CLI flag: --mode dct
|
||
|
||
DCT Options
|
||
Output format:
|
||
--dct-format png Lossless, larger file (default)
|
||
--dct-format jpeg Lossy, smaller, more natural
|
||
|
||
Color mode:
|
||
--dct-color grayscale Traditional DCT (default)
|
||
--dct-color color Preserves original colors
|
||
|
||
v3.2.0 Changes:
|
||
✓ No date parameters needed
|
||
✓ Single passphrase (no daily rotation)
|
||
✓ Default passphrase increased to 4 words
|
||
✓ True asynchronous communications
|
||
|
||
Examples:
|
||
# Traditional DCT (grayscale PNG)
|
||
stegasoo encode ... --mode dct
|
||
|
||
# Color-preserving DCT with JPEG output
|
||
stegasoo encode ... --mode dct --dct-color color --dct-format jpeg
|
||
|
||
# Compare modes for an image
|
||
stegasoo compare carrier.png
|
||
```
|
||
|
||
---
|
||
|
||
### Strip-Metadata Command
|
||
|
||
Remove all metadata (EXIF, GPS, etc.) from an image.
|
||
|
||
#### Synopsis
|
||
|
||
```bash
|
||
stegasoo strip-metadata IMAGE [OPTIONS]
|
||
```
|
||
|
||
#### Options
|
||
|
||
| Option | Short | Type | Default | Description |
|
||
|--------|-------|------|---------|-------------|
|
||
| `--output` | `-o` | path | | Output file (default: overwrites as PNG) |
|
||
| `--format` | `-f` | choice | PNG | Output format: `PNG` or `BMP` |
|
||
| `--quiet` | `-q` | flag | | Suppress output |
|
||
|
||
#### Examples
|
||
|
||
```bash
|
||
# Strip metadata, save as PNG
|
||
stegasoo strip-metadata photo.jpg -o clean.png
|
||
|
||
# Overwrite in place (converts to PNG)
|
||
stegasoo strip-metadata photo.jpg
|
||
```
|
||
|
||
Output:
|
||
```
|
||
✓ Metadata stripped
|
||
Input: photo.jpg (2,456,789 bytes)
|
||
Output: clean.png (1,234,567 bytes)
|
||
```
|
||
|
||
---
|
||
|
||
## Embedding Modes
|
||
|
||
Stegasoo supports two steganography algorithms.
|
||
|
||
### LSB Mode (Default)
|
||
|
||
**Least Significant Bit** embedding modifies pixel values directly.
|
||
|
||
```bash
|
||
stegasoo encode ... --mode lsb
|
||
# or just omit --mode (LSB is default)
|
||
```
|
||
|
||
| Aspect | Details |
|
||
|--------|---------|
|
||
| **Capacity** | ~3 bits/pixel (~375 KB for 1920×1080) |
|
||
| **Output** | PNG only (lossless required) |
|
||
| **Resilience** | ❌ Destroyed by JPEG compression |
|
||
| **Best For** | Maximum capacity, controlled channels |
|
||
|
||
### DCT Mode
|
||
|
||
**Discrete Cosine Transform** embedding hides data in frequency coefficients.
|
||
|
||
```bash
|
||
stegasoo encode ... --mode dct --dct-format jpeg --dct-color color
|
||
```
|
||
|
||
| Aspect | Details |
|
||
|--------|---------|
|
||
| **Capacity** | ~0.25 bits/pixel (~65 KB for 1920×1080) |
|
||
| **Output** | PNG or JPEG |
|
||
| **Resilience** | ✅ Better resistance to analysis |
|
||
| **Best For** | Social media, stealth requirements |
|
||
|
||
### DCT Options
|
||
|
||
| Option | Values | Default | Description |
|
||
|--------|--------|---------|-------------|
|
||
| `--dct-format` | `png`, `jpeg` | `png` | Output image format |
|
||
| `--dct-color` | `grayscale`, `color` | `grayscale` | Color processing |
|
||
|
||
### Choosing the Right Mode
|
||
|
||
```
|
||
Need maximum capacity?
|
||
│
|
||
┌──────┴──────┐
|
||
▼ ▼
|
||
YES NO
|
||
│ │
|
||
▼ ▼
|
||
Use LSB Need stealth?
|
||
(default) │
|
||
┌──────┴──────┐
|
||
▼ ▼
|
||
YES NO
|
||
│ │
|
||
▼ ▼
|
||
Use DCT Use LSB
|
||
--mode dct (default)
|
||
```
|
||
|
||
### Capacity Comparison
|
||
|
||
| Mode | 1920×1080 Capacity |
|
||
|------|-------------------|
|
||
| LSB (PNG) | ~375 KB |
|
||
| DCT (PNG) | ~65 KB |
|
||
| DCT (JPEG) | ~50 KB |
|
||
|
||
---
|
||
|
||
## Security Factors
|
||
|
||
Stegasoo uses multiple authentication factors:
|
||
|
||
| Factor | Description | Entropy |
|
||
|--------|-------------|---------|
|
||
| Reference Photo | A photo both parties have | ~80-256 bits |
|
||
| Passphrase | BIP-39 word phrase | ~44 bits (4 words) |
|
||
| Static PIN | Numeric PIN (6-9 digits) | ~20 bits (6 digits) |
|
||
| RSA Key | Shared key file | ~128 bits effective |
|
||
|
||
### Minimum Requirements
|
||
|
||
- At least one of PIN or RSA key must be provided
|
||
- Reference photo is always required
|
||
- Passphrase is always required
|
||
|
||
### Security Configurations
|
||
|
||
| Configuration | Entropy (excl. photo) | Use Case |
|
||
|--------------|----------------------|----------|
|
||
| 4-word passphrase + 6-digit PIN | ~63 bits | Standard use |
|
||
| 6-word passphrase + 6-digit PIN | ~85 bits | Enhanced security |
|
||
| 4-word passphrase + RSA 2048 | ~172 bits | File-based auth |
|
||
| 6-word passphrase + PIN + RSA | ~213 bits | Maximum security |
|
||
|
||
---
|
||
|
||
## Workflow Examples
|
||
|
||
### Basic Secure Communication
|
||
|
||
**Setup (once):**
|
||
```bash
|
||
# Both parties generate credentials
|
||
stegasoo generate
|
||
|
||
# Or share RSA key securely
|
||
stegasoo generate --rsa -o shared_key.pem -p "agreedpassword"
|
||
# Securely transfer shared_key.pem to recipient
|
||
```
|
||
|
||
**Sender:**
|
||
```bash
|
||
# For email, file transfer, etc. (no recompression)
|
||
stegasoo encode \
|
||
-r our_shared_photo.jpg \
|
||
-c random_meme.png \
|
||
-p "our shared passphrase here" \
|
||
--pin 847293 \
|
||
-m "Meeting moved to 3pm"
|
||
```
|
||
|
||
**Sender (social media):**
|
||
```bash
|
||
# For platforms that may recompress
|
||
stegasoo encode \
|
||
-r our_shared_photo.jpg \
|
||
-c random_meme.png \
|
||
-p "our shared passphrase here" \
|
||
--pin 847293 \
|
||
-m "Meeting moved to 3pm" \
|
||
--mode dct \
|
||
--dct-format jpeg
|
||
```
|
||
|
||
**Recipient:**
|
||
```bash
|
||
# Works for both LSB and DCT (auto-detected)
|
||
stegasoo decode \
|
||
-r our_shared_photo.jpg \
|
||
-s received_image.png \
|
||
-p "our shared passphrase here" \
|
||
--pin 847293
|
||
```
|
||
|
||
### Batch Processing
|
||
|
||
**Encode multiple messages:**
|
||
```bash
|
||
#!/bin/bash
|
||
PASSPHRASE="apple forest thunder mountain"
|
||
PIN="123456"
|
||
REF="reference.jpg"
|
||
|
||
for file in messages/*.txt; do
|
||
name=$(basename "$file" .txt)
|
||
stegasoo encode \
|
||
-r "$REF" \
|
||
-c "carriers/${name}.png" \
|
||
-p "$PASSPHRASE" \
|
||
--pin "$PIN" \
|
||
-f "$file" \
|
||
-o "output/${name}_stego.png" \
|
||
-q
|
||
echo "Encoded: $name"
|
||
done
|
||
```
|
||
|
||
**Encode for social media (DCT):**
|
||
```bash
|
||
#!/bin/bash
|
||
for file in messages/*.txt; do
|
||
name=$(basename "$file" .txt)
|
||
stegasoo encode \
|
||
-r "$REF" \
|
||
-c "carriers/${name}.png" \
|
||
-p "$PASSPHRASE" \
|
||
--pin "$PIN" \
|
||
-f "$file" \
|
||
--mode dct \
|
||
--dct-format jpeg \
|
||
-o "output/${name}_social.jpg" \
|
||
-q
|
||
echo "Encoded for social: $name"
|
||
done
|
||
```
|
||
|
||
---
|
||
|
||
## Piping & Scripting
|
||
|
||
### Stdin/Stdout Support
|
||
|
||
**Encode from pipe:**
|
||
```bash
|
||
cat secret.txt | stegasoo encode -r ref.jpg -c carrier.png -p "phrase words" --pin 123456 -o out.png
|
||
```
|
||
|
||
**Decode to pipe:**
|
||
```bash
|
||
stegasoo decode -r ref.jpg -s stego.png -p "phrase words" --pin 123456 -q | less
|
||
```
|
||
|
||
**Chain with encryption:**
|
||
```bash
|
||
# Encode GPG-encrypted content
|
||
gpg -e -r recipient@email.com secret.txt
|
||
cat secret.txt.gpg | base64 | stegasoo encode -r ref.jpg -c carrier.png -p "phrase" --pin 123456
|
||
|
||
# Decode and decrypt
|
||
stegasoo decode -r ref.jpg -s stego.png -p "phrase" --pin 123456 -q | base64 -d | gpg -d
|
||
```
|
||
|
||
### JSON Output for Scripts
|
||
|
||
```bash
|
||
# Get credentials as JSON
|
||
creds=$(stegasoo generate --json)
|
||
|
||
# Extract specific fields
|
||
passphrase=$(echo "$creds" | jq -r '.passphrase')
|
||
pin=$(echo "$creds" | jq -r '.pin')
|
||
entropy=$(echo "$creds" | jq -r '.entropy.total')
|
||
|
||
echo "Passphrase: $passphrase"
|
||
echo "PIN: $pin"
|
||
echo "Total entropy: $entropy bits"
|
||
```
|
||
|
||
### Error Handling in Scripts
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
set -e
|
||
|
||
if ! stegasoo decode -r ref.jpg -s stego.png -p "phrase" --pin 123456 -q 2>/dev/null; then
|
||
echo "Decryption failed - check credentials"
|
||
exit 1
|
||
fi
|
||
```
|
||
|
||
---
|
||
|
||
## Error Handling
|
||
|
||
### Common Errors
|
||
|
||
| Error | Cause | Solution |
|
||
|-------|-------|----------|
|
||
| "Must provide --pin or --key" | No security factor given | Add `--pin` or `--key` option |
|
||
| "PIN must be 6-9 digits" | Invalid PIN format | Use numeric PIN, 6-9 chars |
|
||
| "Payload too large for LSB mode" | Message exceeds capacity | Use larger carrier or shorter message |
|
||
| "Payload too large for DCT mode" | DCT has less space | Use LSB mode or shorter message |
|
||
| "Decryption failed" | Wrong credentials | Verify passphrase, PIN, ref photo |
|
||
| "DCT mode requires scipy" | Missing library | Install: `pip install scipy` |
|
||
|
||
### Troubleshooting Decryption Failures
|
||
|
||
1. **Check passphrase:** Must be exact match (case-sensitive)
|
||
2. **Verify reference photo:** Must be the exact same file, not a resized copy
|
||
3. **Check stego image:**
|
||
- LSB: Ensure it wasn't resized, recompressed, or converted
|
||
- DCT: More resilient but not immune to heavy processing
|
||
4. **Verify PIN/key:** Must match exactly what was used for encoding
|
||
|
||
### v3.2.0 Migration Note
|
||
|
||
If you're trying to decode images created with v3.1.x:
|
||
- v3.2.0 **cannot** decode v3.1.x images (date-based key derivation removed)
|
||
- Keep v3.1.x installed to access old images
|
||
- Re-encode old messages with v3.2.0 for forward compatibility
|
||
|
||
---
|
||
|
||
## Exit Codes
|
||
|
||
| Code | Meaning |
|
||
|------|---------|
|
||
| 0 | Success |
|
||
| 1 | General error / decryption failed |
|
||
| 2 | Invalid arguments/options |
|
||
|
||
---
|
||
|
||
## Environment Variables
|
||
|
||
| Variable | Description |
|
||
|----------|-------------|
|
||
| `PYTHONPATH` | Include `src/` for development |
|
||
| `STEGASOO_DEBUG` | Enable debug output (set to `1`) |
|
||
|
||
---
|
||
|
||
## Dependencies
|
||
|
||
### Core Dependencies
|
||
|
||
- `pillow` - Image processing
|
||
- `cryptography` - Encryption
|
||
- `argon2-cffi` - Key derivation
|
||
- `click` - CLI framework
|
||
|
||
### DCT Mode Dependencies
|
||
|
||
- `scipy` - DCT transformations
|
||
|
||
Install DCT dependencies:
|
||
```bash
|
||
pip install scipy
|
||
```
|
||
|
||
Check availability:
|
||
```bash
|
||
stegasoo modes
|
||
# or
|
||
python -c "from stegasoo import has_dct_support; print('DCT:', has_dct_support())"
|
||
```
|
||
|
||
---
|
||
|
||
## See Also
|
||
|
||
- [API Documentation](API.md) - Python API reference
|
||
- [Web UI Documentation](WEB_UI.md) - Browser interface guide
|
||
- [README](../README.md) - Project overview and security model
|