Provided by: hashrat_1.25+ds-1_amd64 bug

NAME

       hashrat - hashing tool supporting several hashes and recursivity

SYNOPSIS

       hashrat [options] [paths to hash]

       hashrat -c [options] [input file of hashes]

DESCRIPTION

       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 its own format.

       Hashes  can  be  output in octal, decimal, hexadecimal, uppercase hexadecimal and various types of base32
       and 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 hashes.

OPTIONS

       -?, -help, --help
              Print this help.

       -version, --version
              Print program version.

       -type <type>
              Use hash algorithm <type>. Hash types can be chained as a comma-seperated list.

       -md5   Use md5 hash algorithm. This is the default hash.

       -sha1  Use sha1 hash algorithm.

       -sha256
              Use sha256 hash algorithm.

       -sha512
              Use sha512 hash algorithm.

       -whirl Use whirlpool hash algorithm.

       -whirlpool
              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.

       -totp <secret>
              TOTP code from supplied secret (defaults to google authenticator compatible code).

       -totp <url>
              TOTP  code  from  supplied  otpauth  url, the url is distinguished from a secret using the leading
              'oftpauth:' component.

       -digits <n>
              Produce TOTP code with <n> digits.

       -period <n>
              Produce TOTP code with period/lifetime of <n> seconds.

       -8     Encode with octal instead of hex.

       -10    Encode with decimal instead of hex.

       -H, -HEX
              Encode with UPPERCASE hexadecimal.

       -32, -base32
              encode with base32.

       -c32   encode with Crockfords base32.

       -w32   encode with word-safe base32.

       -z32   encode with zbase32.

       -64, -base64
              encode with base64.

       -i64, -i64
              Encode with base64, with rearranged characters.

       -p64, -p64
              Encode with base64 with a-z,A-Z and _-,  for  best  compatibility  with  'allowed  characters'  in
              websites.

       -x64, -x64
              Encode with XXencode style base64.

       -u64, -u64
              Encode with UUencode style base64.

       -g64, -g64
              Encode with GEDCOM style base64.

       -a85, -a85
              Encode with ASCII85.

       -z85, -z85
              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.

       -hid   Show hidden (starting with .) files

       -hidden
              Show hidden (starting with .) files

       -f <listfile>
              Hash files listed in <listfile>.

       -i <pattern>
              Only hash items matching a comma-seperated list of shell patterns. Please be aware  that  -i  does
              not yet work on directories, only files.

       -x <pattern>
              Exclude  items  matching  a  comma-seperated list of shell patterns. Works on both directories and
              files.

       -X <path>
              Exclude items listed in file <path>. Items in the file can be wildcards.

              -name  <pattern> Only hash items matching a comma-seperated list of shell patterns  (-name  as  in
              the 'find' command).

              -mtime   <days>  Only  hash items <days> old. Has the same format as the find command, e.g. -10 is
              younger than ten days, +10 is older than ten, and 10 is ten days old.

              -mmin  <mins> Only hash items <min> minutes old. Has the same format as the find command, e.g. -10
              is younger than ten mins, +10 is older than ten, and 10 is ten mins old.

              -myear  <years> Only hash items <years> old. Has the same format as the find command, e.g. -10  is
              younger than ten years, +10 is older than ten, and 10 is ten years old.

       -exec  In CHECK or MATCH mode only examine executable files.

       -dups  Search for duplicate files.

       -rename
              Rename   files   to   include  hash  at  the  end  of  their  filename.  Files  will  have  format
              <name>-<hash>.<extn>.

       -n <length>
              Truncate hashes to <length> bytes.

       -c     CHECK hashes against list from file (or stdin).

       -cf    CHECK hashes but only show failures.

       -C <dir>
              CHECK files under dir recursively against a list from file (or stdin). This can detect 'new' files

       -Cf <dir>
              CHECK files under dir recursively against a list from file  (or  stdin).  This  can  detect  'new'
              files. 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 option).

       -memcached <server>, -mcd <server>
              Specify  memcached  server.  This  option overrides reading list from stdin if used with -m, -c or
              -cf.

       -h <script>
              -hook <script> Script to run when a file fails CHECK mode, or is found in MATCH  mode.  Script  is
              passed  the  filename as an argument. In 'find duplicates' mode a second file name (the duplicate)
              will be passed as the second argument.

       -color Use ANSI color codes on output when checking hashes.

       -S, -strict
              Strict mode: when checking, check file mtime, owner, group, and inode as well as its hash.

       -d     Dereference (follow) symlinks.

       -fs    Stay one filesystem.

       -dir   -dirmode DirMode: read all files in directory and create one hash for them (implies -r).

       -devmode
              DevMode: read from a file EVEN IF IT'S A DEVNODE.

       -lines Read lines from stdin and hash each line independently.

       -rl, -rawlines
              Read lines from stdin and hash each line independently, INCLUDING any trailing whitespace. This is
              compatible with 'echo text | md5sum'.

       -cgi   Run in HTTP CGI mode.

       -xdialog
              Run in 'xdialog' (zenity, yad or qarama) mode.

       -dialog-types
              Specify  a  list  of  dialog  commands  and  use  the  first  found  on  the  system.  Default  is
              'yad,zenity,qarma'.

       -iprefix <prefix>
              String to prefix all input before hashing

       -oprefix <prefix>
              Prefix to add to the front of output hashes

       -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 http://[username]:[password]@[host]:[port].

       -idfile <path>
              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.

       -txattr
              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. Under FreeBSD this means 'SYSTEM'
              attributes.

       -cache Use hashes stored in user xattr if they're younger than the mtime of  the  file.  This  speeds  up
              outputting  hashes.  When  storing xattr hashes, do not update files that already have the correct
              hash.

       -u <types>
              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 checking.

       -hide-input
              When reading data from stdin in linemode, set the terminal to not  echo  characters,  thus  hiding
              typed input.

       -xsel  Update  X11  clipboard  and primary selections to the current hash. This works using Xterm command
              sequences. The xterm resource 'allowWindowOps' must be set to 'true' for this to work.

       -star-input
              When reading data from stdin in linemode replace characters with stars.

NOTES

       Hashrat can also detect if it's being run under any of the following names (e.g., via symlinks):

       md5sum Run with '-trad -md5'.

       shasum Run with '-trad -sha1'.

       sha1sum
              Run with '-trad -sha1'.

       sha256sum
              Run with '-trad -sha256'.

       sha512sum
              Run with '-trad -sha512'.

       jh224sum
              Run with '-trad -jh224'.

       jh256sum
              Run with '-trad -jh256'.

       jh384sum
              Run with '-trad -jh384'.

       jh512sum
              Run with '-trad -jh512'.

       whirlpoolsum
              Run with '-trad -whirl'.

       hashrat.cgi
              Run in web-enabled 'cgi mode'.

EXAMPLES

       hashrat
              Generate a md5 hash of data read from stdin  (default hash type is md5).

       hashrat -jh256
              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 terminators).

       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.

       hashrat -type sha256,whirl,md5 -64
              Generate a sha-256 hash of data read from stdin, then hash the result with  whirlpool,  then  with
              md5.

       hashrat *
              Generate a list of hashes for files in the current directory (default hash type is md5).

       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[1], 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[2].  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
       whitespace 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 mode:

           $ 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.

           [1] https://github.com/discourse/discourse/blob/master/lib/common_passwords/10k-common-passwords.txt

           [2] https://www.grc.com/haystack.htm

       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 -c -sha256

           $ hashrat -C . -sha256  -xattr

           $ hashrat -C /tmp -sha256  -memcached

       Note that -c checks only check the files in the supplied list. The -C flag instead checks all files in  a
       directory  (supplied  on command line) and expects to find those in the list. This means that -C can find
       new files that aren't in the list, whereas -c can't.
       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 found.

       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)  As an 'ls'

       Hashrat outputs a file's name, type, mode, mtime, uid, gid and size, along with a hash. This allows it to
       be  used  as  a kind of 'ls' by ftp style programs, listing all the details of a file, but with the added
       feature of a hash.

       6)  Hashing files on remote machines

       If run with the '-net' option, hashrat will treat paths starting with 'http://' or 'ssh://'  differently,
       connecting to the target machine and pulling files off it (hashrat assumes there is no hashing program on
       the  remote  machine, and that it must therefore download the files to hash them). For ssh paths wildcars
       are supported:

                 hashrat -net ssh://username:password@server/usr/bin/*

       7)  As a TOTP authenticator

       Hashrat can be used as a TOTP authenticator, and defaults to google-authenticator compatible codes.

                 hashrat -totp 3EK4LIB2553CUPA7DBXJMMKDCYTEA2IZA

HOOKSCRIPTS

         Hookscripts, defined using the -h or -hook command-line options, are scripts  that  are  run  for  each
       hashed  item.  -h  and  -hook options take an argument that is the path to the script. Hookscripts behave
       differently in different modes:

       Check Hashes mode.
              The hookscript is called if a file doesn't match its expected  hash,  or  is  not  listed  in  the
              expected hashes. It is passed the path of the file.

       Locate files mode
              The hookscript is called if a file matches the hash to locate. It is passed the path of the file.

       Find duplicates mode
              The  hookscript is called if a file is a duplicate of another file. It is passed the paths of both
              files.

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.

       CGI Mode can be configured using an options file. The file path is passed in the url, like this:
       hashrat.cgi?OptionsFile=/etc/hashrat.options

       If  an options file is used, then CGI mode uses the options in the file as its defaults. The options file
       contains the following :

       HashType <type>      Type of hash to generate

       Encoding <type>      Type of encoding to use for outputted hash

       Line Ending <type>   Line ending to append to input text. This is for compatibility with command-line
       usage with "-rawlines". Options are "none", "lf", "crlf" or "cr", meaning "none", "newline", "carriage-
       return newline" and "carriage-return" respectively.

       OutputLength <len>   Crop output hash to length len "len"

       SegmentLength <len>  Break output up into segments of length "len"

       SegmentChar <char>   Separate output segments with character "char"

       NoOptions            Do not offer the user the options so they can change them. Just show an entry box to
       enter text.

       HideText             Hide inputted text (overrides any other config)

       ShowText             Show inputted text (overrides any other config)

       Example:
              HashType=sha256
              Encoding=base64
              LineEnding=none
              OutputLength=12
              SegmentLength=4
              SegmentChar=+
              NoOptions=Y

TOTP MODE

       Hashrat can be used as a TOTP (Time-based One  Time  Password)  authenticator  and  defaults  to  google-
       authenticator compatible codes. The simplest use case is:

       hashrat -totp <secret>

       It's possible to change the hash, period/lifetime and number of digits in the TOTP code like so:

       hashrat -totp 3EK4LIB2553CUPA7DB -sha256 -period 90 -digits 8

CLIPBOARD OUTPUT

       Hashes  produced in standard-in input mode and TOTP codes can be pushed to the system clipboard using the
       `-clip` option. This option first tries to find a command that can set the clipboard, searching  for  one
       of  'xsel',  'xclip'  or 'pbcopy'. If it can't find any of these, it falls back to using xterm's built in
       clipboard setting method.

       Alternatively the `-xsel` option only attempts to use the xterm clipboard setting method.

       The default list of clipboard commands can be overridden using the `-clipcmd` option.

QRCODE OUTPUT

       Hashes produced in standard-in input mode and TOTP codes can be displayed as qrcodes using the  `-qr`  or
       `-qrcode` options. These options require the "qrencode" utility to be installed, and also an image viewer
       that can be used to display the qrcode image.

       By default hashrat searches for the following image viewers:

       imlib2_view,fim,feh,display,xv,phototonic,qimageviewer,pix,sxiv,qimgv,qview,nomacs,geeqie,ristretto,mirage,fotowall,links -g

       The default list of image viewers can be overridden using the `-viewcmd` option.

RENAME FILES

       The  `-rename`  option  allows renaming files to include a hash in their filename. The filename format is
       `<name>-<hash>.<extn>`. For example:

       hashrat -p64 -md5 -rename main.c

       Will rename `main.c` to `main-gAmHI2oarRmpiXkE7MVK90.c`, where `gAmHI2oarRmpiXkE7MVK90` is it`s  MD5  has
       encoded with the `p64` base-64 encoding scheme.

       The standard `-64` encoding scheme uses the `/` character, which is not allowed in a filename and results
       in renames failing. Thus the `-p64` or `-r64` encoding schemes should be used.

       Using the `-r` flag entire directories of files can be renamed in this manner:

       hashrat -p64 -md5 -rename -r myfiles

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 attributes):

           # 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
       instance).

AUTHOR

       The hashrat was written by Colum Paget <colums.projects@gmail.com>.

       This manual page was written by Joao Eriberto Mota Filho <eriberto@debian.org>  for  the  Debian  project
       (but may be used by others).

HASHRAT 1.23                                        Dec 2024                                          hashrat(1)