Embed messages in the sort order of lists/dicts/JSON/tar.
Project description
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.