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.
Source Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | d4a489a1d3444f775e4ab722ca40109ccad6f3f5076c5832d2eb7c87453c0dbc |
|
MD5 | 4539dbb08ad0309382d3e28bbeae5da3 |
|
BLAKE2b-256 | 9dc575c0ff64695ae351cef62924924ded3a8efaa29e871769ebda34fff427ab |