This is the command hashrat that can be run in the OnWorks free hosting provider using one of our multiple free online workstations such as Ubuntu Online, Fedora Online, Windows online emulator or MAC OS online emulator
hashrat - hashing tool supporting several hashes and recursivity
hashrat [options] [paths to hash]
hashrat -c [options] [input file of hashes]
Hashrat is a hash-generation utility that supports the md5, sha1, sha256, sha512,
whirlpool, jh-224, jh256, jh-384 and jh-512 hash functions, and also the HMAC versions of
those functions. It can output in traditional format (same as md5sum and shasum and the
like) or it's own format.
Hashes can be output in octal, decimal, hexadecimal, uppercase hexadecimal or base64.
Hashrat also supports directory recursion, hashing entire devices, and generating a hash
for an entire directory. It has a CGI mode that can be used as a web-page to lookup
-?, -help, --help
Print this help.
Print program version.
-md5 Use md5 hash algorithm. This is the default hash.
-sha1 Use sha1 hash algorithm.
Use sha256 hash algorithm.
Use sha512 hash algorithm.
-whirl Use whirlpool hash algorithm.
Use whirlpool hash algorithm.
-jh224 Use jh-224 hash algorithm.
-jh256 Use jh-256 hash algorithm.
-jh384 Use jh-384 hash algorithm.
-jh512 Use jh-512 hash algorithm.
-hmac HMAC using specified hash algorithm.
-8 Encode with octal instead of hex.
-10 Encode with decimal instead of hex.
Encode with UPPERCASE hexadecimal.
Encode with base64.
Encode with base64, with rearranged characters.
Encode with base64 with a-z,A-Z and _-, for best compatibility with 'allowed
characters' in websites.
Encode with XXencode style base64.
Encode with UUencode style base64.
Encode with GEDCOM style base64.
Encode with ASCII85.
Encode with ZEROMQ variant of ASCII85. -t, -trad Output hashes in traditional
md5sum, shaXsum format.
-tag, --tag -bsd
Output hashes in bsdsum format.
-r Recurse into directories when hashing files.
Hash files listed in <listfile>.
Only hash items matching <pattern>.
Exclude items matching <pattern>.
Truncate hashes to <length> bytes.
-c CHECK hashes against list from file (or stdin).
-cf CHECK hashes but only show failures.
-m MATCH files from a list read from stdin.
-lm Read hashes from stdin, upload them to a memcached server (requires the -memcached
In CHECK or MATCH mode only examine executable files.
-dups Search for duplicate files.
-memcached <server>, -mcd <server>
Specify memcached server. This option overrides reading list from stdin if used
with -m, -c or -cf.
Script to run when a file fails CHECK mode, or is found in MATCH mode.
Script to run when a file fails CHECK mode, or is found in FIND mode
-color Use ANSI color codes on output when checking hashes.
Strict mode: when checking, check file mtime, owner, group, and inode as well as
-d Dereference (follow) symlinks.
-fs Stay one filesystem.
DirMode: read all files in directory and create one hash for them.
DevMode: read from a file EVEN OF IT'S A DEVNODE.
-lines Read lines from stdin and hash each line independently.
Read lines from stdin and hash each line independantly, INCLUDING any trailing
whitespace. This is compatible with 'echo text | md5sum'.
-cgi Run in HTTP CGI mode.
-net Treat 'file' arguments as either ssh or http URLs, and pull files over the network
and then hash them (allows hashing of files on remote machines). URLs are in the
format ssh://[username]:[password]@[host]:[port] or
Path to a ssh private key file to use to authenticate INSTEAD OF A PASSWORD when
pulling files via ssh.
-xattr Use eXtended file ATTRibutes. In hash mode, store hashes in the file attributes. In
check mode compare against hashes stored in file attributes.
Use TRUSTED eXtended file ATTRibutes. In hash mode, store hashes in trusted file
attributes. The trusted attributes can only be read and written by root.
-cache Use hashes stored in user xattr if they're younger than the mtime of the file. This
speeds up outputting hashes.
Update. In checking mode, update hashes for the files as you go. The <types> is a
comma-separated list of things to update, which can be xattr memcached or a file
name. This will update these targets with the hash that was found at the time of
When reading data from stdin in linemode, set the terminal to not echo characters,
thus hiding typed input.
When reading data from stdin in linemode replace characters with stars.
Hashrat can also detect if it's being run under any of the following names (e.g., via
md5sum Run with '-trad -md5'.
shasum Run with '-trad -sha1'.
Run with '-trad -sha1'.
Run with '-trad -sha256'.
Run with '-trad -sha512'.
Run with '-trad -jh224'.
Run with '-trad -jh256'.
Run with '-trad -jh384'.
Run with '-trad -jh512'.
Run with '-trad -whirl'.
Run in web-enabled 'cgi mode'.
Generate a md5 hash of data read from stdin (default hash type is md5).
Generate a jh-256 hash of data read from stdin.
hashrat -sha256 -64
Generate a sha-256 hash of data read from stdin, output with base64 encoding.
hashrat -sha256 -64 -lines
Read lines from stdin, and generate a sha-256 with base64 encoding FOR EVERY LINE.
This strips any whitespace from the end of the line (including \r and/or \n line
hashrat -md5 -trad -rawlines
Read lines from stdin, and generate a md5 hash in traditional format for every line
INCLUDING TRAILING WHITESPACE. This is compatible with 'echo text | md5sum', where
text is one line, as echo adds a newline to the end of the text it outputs.
Generate a list of hashes for files in the current directory (default hash type is
hashrat -r -sha1 * > hashes.sha1
Generate a list of hashes for files in the current directory, AND ALL
SUBDIRECTORIES, using sha1 hashing.
cat hashes.sha1 > hashrat -c
Check hashes listed in hashes.sha1.
cat hashes.sha1 > hashrat -c -strict
Check hashes listed in hashes.sha1. If hashes are NOT in traditional format than
the -strict flag will cause hashrat to check the files uid, gid, size, mtime and
inode and print a failure message if any of those don't match.
cat hashes.sha1 > hashrat -cf
Check hashes listed in hashes.sha1 but only output failures.
cat APT1.md5 | hashrat -m -r /
Read a list of hashes from stdin and search recursively for files matching them.
cat APT1.md5 | hashrat -lm -memcached 127.0.0.1
Read a list of hashes from stdin, and register them in a memcached server.
hashrat -m -memcached 127.0.0.1 -r /
Search recursively for files whose hashes are stored in a memcached server.
hashrat -devmode -whirlpool -64 /dev/sda1
Generate a whirlpool hash of the entire device /dev/sda1. Output result in base 64.
hashrat -sha1 -net ssh:user:password@myhost/bin/*
Generate sha1 hashes of files in /bin/* on the remote machine 'myhost'.
hashrat -whirlpool -net http://myhost.com/webpage.html
Generate whirlpool hash for the listed URL. Note, many webpages have dynamic
content that changes every time, so this will only return the same hash over and
over if the page is static and doesn't change.
hashrat -dups -r /home -u xattr
Search for duplicate files under /home. Update hashes stored in filesystem
attributes as you go.
USES FOR HASHRAT
1) Strong Passwords
Hashrat can be used to generate strong passwords for websites. So, you don't have to
remember the strong password, if it be always regenerate with hashrat. You need to
remember a handful of moderately decent passwords, i.e., things that I can't find by
grepping in the '10,000 most popular passwords' list, and an additional personal pin.
Now, you need to combine the website name, one of passwords, and the personal pin, into a
string and feed them into hashrat:
$ echo "facebook.com password 1234" | hashrat -sha1 -64
Obviously, a good password isn't 'password' and a good pin isn't '1234', but you get the
idea. This gives a 28-character string that should take "8.02 trillion centuries" to crack
with a "massive cracking array", according to Steve Gibson's Password haystacks
utility. This is what I then use as my password. Unfortunately some websites won't take
a 28-character password, and for these you can truncate to the appropriate length (using
the -n flag), but the results are still stronger than anything you could remember, and
nothing needs storing on disk (as with password managers).
There are some dangers to using the 'echo' method shown above if you are on a shared
machine, or if someone gets hold of your computer/harddrive. On a shared machine someone
could type 'ps ax' to see all commands running, and if they time it right, they might see
your command-line with your password in it. Another danger lies in using a shell (like
bash) that will record your typed commands so you can recall them later. Bash stores this
information on disk in the file .bash_history, so if you use the 'echo' method shown above
your password will be saved on disk. To combat this hashrat has line mode:
$ hashrat -sha1 -64 -lines
This reads lines from stdin, so type into hashrat and then press ENTER, and you'll be
given the hash of the line you typed. By this method your password is neither visible in
'ps ax', nor is ever stored on disk.
A -lines will produce a different hash to the 'echo' method listed above, because it
strips any trailing whiespace off the lines read. If you want strict compatibility with
'echo' (by default echo adds a newline to the end of the text to output) then use rawlines
$ hashrat -sha1 -64 -rawlines
Finally, you can prevent shoulder-surfers seeing you type your password by using the
-hide-input or -star-input options to hide what you type.
2) Watching for file changes
Like md5sum/shasum etc, hashrat can be used to detect changes in files that might indicate
malicious activity. For instance, in order to get early warning of malware like
cryptolocker (that encrypts files on a users disk, or on network shares, and then demands
a ransom for file recovery) you can scatter about the disk a number of Canary files that
should not change. You need record their hashes and regularly check them. If they change,
you will know something is going on.
Hashes generated by hashrat can be output to a file, or stored in extended file
attributes, or in a memcached server.
$ hashrat -sha256 -r . > /tmp/files.sha256
$ hashrat -sha256 -r . -xattr
$ hashrat -sha256 -r . -memcached
Similarly these can then be used to check files later:
$ cat /tmp/files.sha256 | hashrat -sha256
$ hashrat -c -sha256 -r . -xattr
$ hashrat -c -sha256 -r . -memcached
There is a slight difference between xattr/memcached checks and checks where a list is
read from stdin. Currently when reading from stdin hashrat will ONLY check the files in
the list. However, in -xattr and -memcached mode, it will check all files, outputting and
error for those where no stored hash can be found. This is likely to change in the a
future release, with the stdin method being brought into line with the others.
3) Finding files that match hashes
Using the -m flag hashrat can be told to read a range of hashes from stdin, and then
search for files matching those hashes. For Example:
$ cat APT1-AppendixE-MD5s.txt | hashrat -r -m /usr
The last command will search recursively under /usr for files with hashes matching those
in APT1-AppendixE-MD5s.txt. The input on stdin must begin with a hash, anything written
after the hash will be treated as a comment to be displayed if a file matching the hash is
Hashtypes other than md5 can be used thusly:
$ cat sha1-list.lst | hashrat -r -sha1 -m /usr
Hashes can also be loaded into a memcached server, so that the same file list can be
checked on a number of machines, without needing to store the hashlist on those machines.
First you need load the hashes:
$ cat APT1-AppendixE-MD5s.txt | hashrat -lm -memcached 192.168.1.5
The last line loads the hashes to a memcached server at 192.168.1.5. You can then search
against the memcached server by:
$ hashrat -r -m -memcached 192.168.1.5 /usr
4) Find duplicate files
Using the -dups flag (usually in combination with the -r recursive flag) hashrat can be
set to search for duplicate files and output any found to stdout.
5) CGI Mode
If hashrat is run with the -cgi flag, or if it's run with a name of hashrat.cgi (either by
renaming the hashrat executable, or via a symbolic link) it will output a webpage that
allows users to look up hashes over the web. This allows to look-up your strong passwords
even if you don't have access to a local version of hashrat.
EXTENDED FILESYSTEM ATTRIBUTES
Hashrat can use extended filesystem attributes where these are supported. This allows a
hash to be stored in the filesystem metadata of the target file. This can then be used for
checking hashes, or for caching hashes to produce faster output during hashing runs. There
are two types of filesystem attribute, trusted attributes, which can only be set and read
by root, and user attributes, which can be set and read by any user that has the
appropriate permissions for the file.
Hashes can be stored against files by using the -xattr option to set user attributes:
$ hashrat -sha256 -r . -xattr
And using the -txattr flag to set trusted attributes (you must be root to set trusted
# hashrat -sha256 -r . -txattr
When checking either flag can be used, but hashrat will always use trusted attributes when
running as root, if those are available, otherwise it will fall back to user attributes.
$ hashrat -c -sha256 -r . -xattr
The -cache option allows using stored hashes rather than regenerating hashes. It only
considers hashes stored in user attributes at current.
$ hashrat -r . -cache
This makes getting a report of hashes considerably faster, but it runs the risk that the
hashes may not be accurate. Hashrat will only output a hash stored in file attributes if
the storage time of the hash is younger than the modify time (mtime) of the file, however,
this means an attacker could change the modify time of the file to hide changes they've
made. Thus this feature should not be used for security checking purposes (but should be
safe for uses like finding files that have changed and need to be backed up, for
Use hashrat online using onworks.net services