Anagrhash is a tool which can generate anagrams, and test them against a hash.
It is a tool I wrote many years ago for educative purposes, to try out some different concurrency models and inter-thread communication methods in C, and get some basics of programming in the GNU/Linux environment.
It serves as an anagram generator, and can shuffle letters, but can also be set to shuffle whole words in a sentence, use tokens from a list (words which you don't want to appear simultaneously), and specify separators between tokens (like spaces or commas).
It can also test anagrams which satisfies an exact target hash, or a hash specified with a regular expression.
The home page for this project is http://simonebaracchi.eu/posts/anagrhash
# sudo apt-get install libmhash-dev libglib2.0-dev
# make
The repo contains a binary which might work for you, if you are on an x86 Debian or similar.
anagrhash v0.2, an anagram generator/hash reverser
Usage: anagrhash [OPTIONS] [token1 [token2 ...]] { xtoken1 xtoken2 [...] }
Available options:
-h hash : Stops when hash is matched
-r regex : Stops when hash matches regex
-a word : Use every letter of word as token (makes anagrams of word)
-s separators : Use separators between tokens
-l n : Use at most n tokens (default: 8)
-i filename : Load every line of file as a token
-e filename : Load every line of file as a group of exclusive tokens
-o filename : Writes anagrams to file
[any word] : Use word as token
{ [any word] } : Add the words specified between curly brackets to an exclusive-tokens group
-n : Terminates every token with a newline before generating a hash.
-v : Verbose mode.
-vv : Also prints every generated key.
-? : Prints this help.
By default anagrams are not printed to screen. Use either -vv or -o to print to file.
# anagrhash -a hello
-> generates all anagrams of "hello"
# anagrhash hello world
-> generates all combinations of the tokens "hello" and "world"
e.g. hello
world
helloworld
worldhello
# anagrhash -s , hello world
-> generates all combinations of the tokens "hello" and "world", separating the tokens with ","
e.g. hello
world
hello,world
world,hello
# anagrhash hello { world earth }
-> Uses only one of "world" or "earth"
e.g. hello
earth
world
earthhello
worldhello
helloearth
helloworld
# anagrhash -l 2 hello world earth
-> Uses at most 2 out of "hello", "world", "earth"
e.g. earth
world
hello
worldearth
helloearth
earthworld
helloworld
earthhello
worldhello
# anagrhash -l 2 hello world earth -h fc5e038d38a57032085441e7fe7010b0
-> String 'helloworld' matches hash fc5e038d38a57032085441e7fe7010b0, success!
# anagrhash -a abcdefghijklmnopqrstuvwxyz -n -r 'baddcafe'
-> Tries to find a combination of "[a-z]{8}\n" which hashes to "baddcafe"