This is meant to be an instructional write-up to touch on some common ideas and mechanisms in cryptography, and leverage them to make a reasonable steganographic program.
Full documentation and a usable demo page are at the link to my blog.
- AES-256 encrypted with optional BZ2 compression.
- Multi-round password hashing to derive key material from passwords.
- No predictable patterns to search for. Offset is derived from the
password, and the stride between pixels is arhythmic, with a seed value
derived from the password.
- Each color is treated as a discrete channel, with messages able to
span channels. This allows up to three independent messages to be
overlaid on the same carrier, or one message can occupy multiple
- Option for automatic re-scaling of the carrier image to minimize waste.
- All relevant parameters are derived from the key, or stored as
discrete bits, allowing for simple decoding. Just supply a carrier image
and a correct password.
- MD5 integrity verification.
- File storage and retrieval
- Built-in trivial logging faculty.
J. Ian Lindsay •
02/19/2016 at 06:42 •
The node.js port is not yet up to feature-parity with the PHP original. But it works for simple text strings. Most of the missing features are simple changes and fixes.
I would prefer to re-work the library into a more proper functional style, as it suffers from some of the style of PHP, as it was a more-or-less direct port. If there is sufficient interest at the github page, and/or bitcoin-sponsored issues, I will devote time to fixing them. PR's are always welcome.
J. Ian Lindsay •
11/19/2015 at 19:16 •
In light of recent idiocy in government threatening to attack encryption, I changed the license to the most permissive license I could find.
I will not ration bullets in a war. Fork it. Mutate it. Re-purpose it. Learn from it. Make government impossible.
View all 2 project logs
Enjoy this project?