Remember Cloakify? Well, this is that.
But worse, in node.js.
This project is a not-really-clean-room port of the Cloakify project into the node.js ecosystem as a library.
Don't know what the Cloakify project is?
Basically, it's text-based steganography, which means, hiding files/data in text.
Simple, first install the module in your project:
npm i shroudify
or yarn add shroudify
then import it:
const shroudify = require("shroudify")
or import shroudify from shroudify
There are two methods, .encode(input, {options})
and .decode(input, {options})
.
The thing has JSDoc typings w/ explanatory descriptions, btw. So this explanation's only good if you're trying it out on runkit or smth.
input
can either be a string
or a Buffer
.
The options
object can contain any of these:
- Cipher
The cipher to use, can be one of the premade ciphers' name, or a path to a file containing 65 strings, with 1 string per row. - Rounds
The number of base64 encoding rounds to be done, good for injecting dead data, isn't that useful to prevent brute-force, however.
In fact, this could even compromise the secrecy of the system by providing more data on the cipher itself. - Key
The key to use for encryption. If set, the data will first be encrypted through AES-256 before being encoded. Currently the library only supports encryption through AES-256 w/o any native support for custom providers. - Compression The encryption level to use (0-9). If set, the data will be compressed using brotli. Currently brotli is the only available provider for compression, though support for more is planned (PRs are welcome wink wink).
- Seed
The seed for shuffling the cipher wordlist. - writeFile
A path. If set, this will append to the file specified. - Join
The character that joins the encoded message's strings, by default it is" "
, however"\n"
, for example, can allow for line-based cipher strings.
Both methods return a string
.
Current out-of-the-box ciphers:
urls
Random URLs I generated on some random URL generator.
kek
Weird shits that popped into my head while devving this. The
kek
cipher is filled with "questionable"/NSFW language, ple ase don't use it in an unsuitable production environment.randomwords
Random words generated by niceware
To set up a dev environment:
- Clone the repo
- Install dependencies on the root of the repo, use any node package manage you want...
- Import the thing from the entry point, i.e.
index.js
. So, e.g.const shroudify = require("./index.js")
.
Shroudify is licensed under apache-2.0
, dew any project you'd like n habe fun!