Skip to main content

Embed messages in the sort order of lists/dicts/JSON/tar.

Project description

Build Status Coverage Status

steganosort

Sort order steganography

The ordering of an "unordered" list is an information channel.

This library demonstrates how to embed data in the sort order of python (>=3.6) lists, dictionaries, and JSON.

Based on https://github.com/CalderWhite/gif-msg.

Installation

Use pip:

pip install steganosort

or from source,

python setup.py build
python setup.py install

Usage

from steganosort import encode, decode
x = list(range(64))
y = encode(x, b'hello world!')
y
decode(y)

Expected output:

[16, 17, 18, 19, 20, 21, 1, 5, 13, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 14, 32, 33, 2, 34, 35, 36, 0, 37, 38, 39, 4, 40, 12, 41, 8, 42, 43, 7, 44, 45, 46, 47, 48, 15, 49, 50, 51, 3, 52, 54, 55, 56, 58, 59, 60, 57, 61, 53, 11, 62, 63, 10, 9, 6]

b'hello world!\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

Constraints, and more interesting usage

This approach can only order unique elements -- so arrays or lists with duplicate elements gain no additional payload capacity from those duplicate elements.

However, most key:value data types, such as python's dict, or the javascript/json object, already enforce unique keys. This means you can encode data in the sort order -- for example -- a json object returned over http.

JSON over HTTP example

There is a very basic http server/client example in the examples/ subdirectory. The server requires the python flask package.

To run the server on port 8000:

python -m examples.server

A normal HTTP request shows a normal looking HTTP response:

curl localhost:8000

{"2004": 377.52, "1995": 360.82, "1997": 363.73, "1998": 366.7, "1991": 355.61, "2005": 379.8, "1996": 362.61, "2006": 381.9, "2008": 385.59, "1988": 351.57, "2009": 387.43, "2010": 389.9, "2011": 391.65, "2012": 393.86, "2015": 400.83, "2014": 398.64, "2013": 396.52, "2016": 404.22, "2001": 371.14, "2017": 406.55, "2018": 408.52, "1989": 353.12, "2003": 375.8, "2007": 383.79, "2019": 411.43, "1990": 354.39, "2002": 373.28, "2000": 369.55, "1992": 356.45, "1999": 368.38, "1994": 358.83, "1993": 357.1}

But if we discard the response body and print the message encoded in the sort order:

python -m examples.client

b'M.Loa CO2.'

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

steganosort-0.1.0.tar.gz (5.4 kB view details)

Uploaded Source

File details

Details for the file steganosort-0.1.0.tar.gz.

File metadata

  • Download URL: steganosort-0.1.0.tar.gz
  • Upload date:
  • Size: 5.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.10

File hashes

Hashes for steganosort-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d4a489a1d3444f775e4ab722ca40109ccad6f3f5076c5832d2eb7c87453c0dbc
MD5 4539dbb08ad0309382d3e28bbeae5da3
BLAKE2b-256 9dc575c0ff64695ae351cef62924924ded3a8efaa29e871769ebda34fff427ab

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page