|
<html>
|
|
<head>
|
|
<title>ReHash</title>
|
|
<link rel="stylesheet" type="text/css" href="rehash.css">
|
|
</head>
|
|
<body bgcolor="#FFFFFF" color="#000000">
|
|
|
|
<center>
|
|
<h2>ReHash - A Console-Based Hash Calculator</h2>
|
|
</center>
|
|
|
|
<p><img src="rehash.jpg" alt="ReHash screenshot" width="572px" height="223px"></p>
|
|
|
|
<br>
|
|
<h2>Contents</h2>
|
|
<ul>
|
|
<li><a href="#reintro">Introduction</a></li>
|
|
<li><a href="#realgos">Supported algorithms</a></li>
|
|
<li><a href="#reusage">Usage: General usage</a></li>
|
|
<li><a href="#refnpattern">Usage: Advanced filename pattern matching</a></li>
|
|
<li><a href="#reoutput">Usage: Output options</a></li>
|
|
<li><a href="#rehmac">Usage: Computing HMACs</a></li>
|
|
<li><a href="#resamples">Usage: Some usage examples</a></li>
|
|
<li><a href="#rebench">Usage: Benchmarking</a></li>
|
|
<li><a href="#rethanks">Thanks / acknowledgements</a></li>
|
|
</ul>
|
|
|
|
<br>
|
|
<h2><a name="reintro">Introduction</a></h2>
|
|
|
|
ReHash is a free, open source console-based hash calculator.<br><br>
|
|
Some of the features of ReHash:
|
|
<ul>
|
|
<li>Fully configurable over the command line</li>
|
|
<li>Portable code (currently for Windows and Linux)</li>
|
|
<li>Recursive directory scanning ability</li>
|
|
<li>Many and fast hash algorithms</li>
|
|
<li>Advanced file pattern matching</li>
|
|
<li>4 different output formats: text, HTML, XML, CSV</li>
|
|
</ul>
|
|
<br><br>
|
|
This tool is ideal for webmasters who wish to provide their users hash values of
|
|
their (downloadable) files. The complete hashing process can be automated by using a
|
|
shell/batch script. No additional user interaction is needed (i.e. the program
|
|
won't ask you for anything, it's just using the command-line).
|
|
<br><br>
|
|
ReHash is distributed under the terms of the BSD license. The BSD license
|
|
allows you to use every part of ReHash and ReHash itself freely, but if
|
|
you use source code of ReHash, you have to mention me (Dominik Reichl) somewhere
|
|
in the documents of your application.
|
|
<br><br>
|
|
<br>
|
|
<h2><a name="realgos">Supported algorithms</a></h2>
|
|
|
|
The current version of ReHash supports the following hash algorithms:<br><br>
|
|
|
|
<table width="100%" border="1">
|
|
<tr bgColor="#F0F0F0">
|
|
<td><center><b>Algorithm</b></center></td>
|
|
<td><center><b>Standard</b></center></td>
|
|
<td><center><b>Inventor</b></center></td>
|
|
<td><center><b>Hash Digest Size</b></center></td>
|
|
</tr>
|
|
|
|
<tr><td>Adler-32</td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td><div align="right">32 bits</div></td></tr>
|
|
|
|
<tr><td>CRC-16</td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td><div align="right">16 bits</div></td></tr>
|
|
|
|
<tr><td>CRC-16-CCITT</td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td><div align="right">16 bits</div></td></tr>
|
|
|
|
<tr><td>CRC-16-XMODEM</td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td><div align="right">16 bits</div></td></tr>
|
|
|
|
<tr><td>CRC-32</td>
|
|
<td>ANSI X3.66, FIPS PUB 71</td>
|
|
<td> </td>
|
|
<td><div align="right">32 bits</div></td></tr>
|
|
|
|
<tr><td>CRC-64</td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td><div align="right">64 bits</div></td></tr>
|
|
|
|
<tr><td>eDonkey-2000</td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td><div align="right">128 bits</div></td></tr>
|
|
|
|
<tr><td>ELF-32</td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td><div align="right">32 bits</div></td></tr>
|
|
|
|
<tr><td>FCS-16</td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td><div align="right">16 bits</div></td></tr>
|
|
|
|
<tr><td>FCS-32</td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td><div align="right">32 bits</div></td></tr>
|
|
|
|
<tr><td>FNV (FNV-32/FNV-64)</td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td><div align="right">32/64 bits</div></td></tr>
|
|
|
|
<tr><td>GHash (GHash-32-3, GHash-32-5)</td>
|
|
<td>-</td>
|
|
<td>-</td>
|
|
<td><div align="right">32 bits</div></td></tr>
|
|
|
|
<tr><td>GOST-Hash</td>
|
|
<td>R 34.11-94</td>
|
|
<td> </td>
|
|
<td><div align="right">256 bits</div></td></tr>
|
|
|
|
<tr><td>HAVAL (3/4/5 passes, 256 bits)</td>
|
|
<td> </td>
|
|
<td>Zheng, Pieprzyk,<br>Seberry</td>
|
|
<td><div align="right">256 bits</div></td></tr>
|
|
|
|
<tr><td>MD2</td>
|
|
<td>RFC 1319</td>
|
|
<td>Rivest</td>
|
|
<td><div align="right">128 bits</div></td></tr>
|
|
|
|
<tr><td>MD4</td>
|
|
<td>RFC 1320</td>
|
|
<td>Rivest</td>
|
|
<td><div align="right">128 bits</div></td></tr>
|
|
|
|
<tr><td>MD5</td>
|
|
<td>RFC 1321</td>
|
|
<td>Rivest</td>
|
|
<td><div align="right">128 bits</div></td></tr>
|
|
|
|
<tr><td>RIPEMD-128/RIPEMD-160</td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td><div align="right">128/160 bits</div></td></tr>
|
|
|
|
<tr><td>SHA-1</td>
|
|
<td>FIPS PUB 180-1</td>
|
|
<td>NIST/NSA</td>
|
|
<td><div align="right">160 bits</div></td></tr>
|
|
|
|
<tr><td>SHA-2 (SHA256/SHA384/SHA512)</td>
|
|
<td> </td>
|
|
<td>NIST/NSA</td>
|
|
<td><div align="right">256/384/512 bits</div></td></tr>
|
|
|
|
<tr><td>SizeHash-64</td>
|
|
<td>-</td>
|
|
<td>-</td>
|
|
<td><div align="right">64 bits</div></td></tr>
|
|
|
|
<tr><td>Tiger</td>
|
|
<td> </td>
|
|
<td>Anderson, Biham</td>
|
|
<td><div align="right">192 bits</div></td></tr>
|
|
|
|
<tr><td>XUM-32</td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td><div align="right">32 bits</div></td></tr>
|
|
|
|
</table>
|
|
|
|
<br><br>
|
|
|
|
<h2><a name="reusage">Usage: General usage</a></h2>
|
|
<pre>rehash [options1] filespec [options2] [> outputfile]</pre>
|
|
The command-line is parsed from the left to the right. So if you execute ReHash like this:
|
|
<pre>rehash -all -none *.*</pre>
|
|
it will output nothing, because you first activate all algorithms and then deactivate them
|
|
all.<br><br>
|
|
It doesn't matter whether the options are set before or after the filename
|
|
specification. [options1] and [options2] are equivalent and could be exchanged.<br>
|
|
<br>
|
|
The option '-none' deactivates all algorithms. The option '-all' activates all
|
|
algorithms. Algorithms are activated by using their short name as option name,
|
|
so for example '-md5' would activate the MD5 algorithm, '-sha1' would activate
|
|
the SHA-1 algorithm. To deactivate algorithms selectively, use 'no' plus their
|
|
option name, so '-nomd5' would deactivate the MD5 algorithm, '-nosha1' would
|
|
deactivate the SHA-1 algorithm.
|
|
<br>
|
|
|
|
<h2><a name="refnpattern">Usage: Advanced filename pattern matching</a></h2>
|
|
|
|
ReHash supports advanced filename patterns. Those filename patterns are composed
|
|
of regular (printable) characters which may comprise a filename as well as
|
|
special pattern matching characters:<br>
|
|
<br>
|
|
<table border="1px" width="100%">
|
|
<tr><td>.</td>
|
|
<td>Matches a period. Doesn't have a special meaning.</td></tr>
|
|
<tr><td>?</td>
|
|
<td>Matches any single character.</td></tr>
|
|
<tr><td>*</td>
|
|
<td>Matches zero or more occurences of any character.</td></tr>
|
|
<tr><td>[ab]</td>
|
|
<td>Set. Matches any character in the set. In this case 'a' or 'b'.</td></tr>
|
|
<tr><td>[a-m]</td>
|
|
<td>Range. Matches any character in the defined range. Here all characters between 'a' and 'm'.</td></tr>
|
|
<tr><td>!</td>
|
|
<td>Negation flag. Matches everything that doesn't match the following pattern.</td></tr>
|
|
<tr><td>[!R]</td>
|
|
<td>Matches any character that is not in the defined range R.</td></tr>
|
|
<tr><td>\ or `</td>
|
|
<td>Quote. Matches exactly the following character.</tr></tr>
|
|
</table><br>
|
|
<br>
|
|
If you would like to hash all png files in '/home/' that start with 'S' or 'T',
|
|
use this:
|
|
<pre>rehash "/home/[st]*.png"</pre>
|
|
<br>
|
|
If you would like to hash all jpg and jpe files in 'C:\web\', use this:
|
|
<pre>rehash C:\web\*.jp[eg]</pre><br>
|
|
|
|
<h2><a name="reoutput">Usage: Output options</a></h2>
|
|
|
|
All output options have the prefix 'out:'.<br>
|
|
<br>
|
|
<table border="1px" width="100%">
|
|
<tr><td>-out:none</td>
|
|
<td>Output nothing.</td></tr>
|
|
<tr><td>-out:raw / -out:text</td>
|
|
<td>Output the hashes in text format.</td></tr>
|
|
<tr><td>-out:html</td>
|
|
<td>Output the hashes in HTML format.</td></tr>
|
|
<tr><td>-out:xml</td>
|
|
<td>Output the hashes in XML format.</td></tr>
|
|
<tr><td>-out:csv</td>
|
|
<td>Output the hashes in CSV format.</td></tr>
|
|
<tr><td>-out:pad:true / -out:pad:false</td>
|
|
<td>Pad the hashes to full words or not.</td></tr>
|
|
<tr><td>-out:word:X</td>
|
|
<td>Specifies the word size. Can be 8, 16, 32, ..., 1024, 2048, 'inf'.</td></tr>
|
|
<tr><td>-out:nospaces</td>
|
|
<td>Same as 'out:word:inf'.</td></tr>
|
|
<tr><td>-out:lowhex / -out:uphex</td>
|
|
<td>When output hex characters: lowercase or uppercase.</td></tr>
|
|
<tr><td>-out:decimal</td>
|
|
<td>Output hash bytes in decimal format.</td></tr>
|
|
<tr><td>-out:base64</td>
|
|
<td>Output the hash byte string as base-64 coded string.</td></tr>
|
|
</table><br>
|
|
Some comments:<br><br>
|
|
The padding option doesn't really pad to words. It just outputs as many
|
|
zeros (00 in hex) as needed to form a full word. Some applications
|
|
may need full words, therefor I've included this option.<br>
|
|
<br>
|
|
The same applies for the word size: you don't really specify a word size
|
|
with this, you just set after how many bytes a space delimits the output. So
|
|
if you set the word size to 32 bits (-out:word:32), a space will be printed
|
|
after four hex characters. '-out:word:inf' sets the word output size to
|
|
infinite and will therefor not output any delimiter.
|
|
|
|
<h2><a name="rehmac">Usage: Computing HMACs</a></h2>
|
|
ReHash can compute HMACs. You set the HMAC key by using the command-line option
|
|
'-hmac:XXX' where X stands for the key. The key can be build up of any characters
|
|
other than spaces ' '.<br>
|
|
<br>
|
|
To compute HMACs of all files in '/mnt/' using the HMAC key 'Jefe', use this:
|
|
<pre>rehash "/mnt/*" -hmac:Jefe</pre>
|
|
|
|
<h2><a name="resamples">Usage: Some usage examples</a></h2>
|
|
|
|
Hash all INI files in C:\Windows (including subdirectories) using all hash algorithms:
|
|
<pre>rehash.exe C:\Windows\*.ini</pre><br>
|
|
|
|
Hash all INI files in C:\Windows (excluding subdirectories) using all hash algorithms:
|
|
<pre>rehash.exe -norecur C:\Windows</pre><br>
|
|
|
|
Hash all BAT files on C:\ (including subdirectories) using only MD5 and SHA-1
|
|
(remember command-line is parsed from the left to the right):
|
|
<pre>rehash.exe -none -md5 -sha1 C:\*.bat</pre><br>
|
|
|
|
Hash all files in C:\Temp (excluding subdirectories) using only the GOST algorithm:
|
|
<pre>rehash.exe -norecur -none -gost C:\Temp\*</pre><br>
|
|
|
|
Hash all ZIP files in C:\homepage (including subdirectories) using only the MD5 algorithm
|
|
and output the hashes to C:\homepage\downloads\hashes.txt:
|
|
<pre>rehash.exe -none -md5 C:\homepage\*.zip > C:\homepage\downloads\hashes.txt</pre><br>
|
|
|
|
<b>Options:</b><br><br>
|
|
|
|
<table width="100%" border="1">
|
|
<tr bgColor="#F0F0F0">
|
|
<td width="25%"><center><b>Option</b></center></td>
|
|
<td><center><b>Description</b></center></td>
|
|
</tr>
|
|
|
|
<tr><td>--help / -h / -?/<br>--version / -v</td>
|
|
<td>Print some information about ReHash.</td></tr>
|
|
|
|
<tr><td>-rcrsv / -recur / -r</td>
|
|
<td>Recursive scanning. Scan all files in the specified path including files in
|
|
subdirectories.</td></tr>
|
|
|
|
<tr><td>-norcrsv / -norecur</td>
|
|
<td>Disable recursive scanning. Scan only the files in the specified path not
|
|
including subdirectories.</td></tr>
|
|
|
|
<tr><td>-all / -a</td>
|
|
<td>Enable all algorithms.</td></tr>
|
|
|
|
<tr><td>-none / -n</td>
|
|
<td>Disable all algorithms.</td></tr>
|
|
|
|
<tr><td>-adler32 / -noadler32</td>
|
|
<td>Enable/disable the Adler32 algorithm.</td></tr>
|
|
|
|
<tr><td>-crc16 / -nocrc16</td>
|
|
<td>Enable/disable the CRC-16 algorithm.</td></tr>
|
|
|
|
<tr><td>-crc16c / -nocrc16c</td>
|
|
<td>Enable/disable the CRC-16-CCITT algorithm.</td></tr>
|
|
|
|
<tr><td>-crc16x / -nocrc16x</td>
|
|
<td>Enable/disable the CRC-16-XMODEM algorithm.</td></tr>
|
|
|
|
<tr><td>-crc32 / -nocrc32</td>
|
|
<td>Enable/disable the CRC-32 algorithm.</td></tr>
|
|
|
|
<tr><td>-crc64 / -nocrc64</td>
|
|
<td>Enable/disable the CRC-64 algorithm.</td></tr>
|
|
|
|
<tr><td>-ed2k / -noed2k</td>
|
|
<td>Enable/disable the ED2K algorithm.</td></tr>
|
|
|
|
<tr><td>-elf32 / -noelf32</td>
|
|
<td>Enable/disable the ELF-32 algorithm.</td></tr>
|
|
|
|
<tr><td>-fcs16 / -nofcs16</td>
|
|
<td>Enable/disable the FCS-16 algorithm.</td></tr>
|
|
|
|
<tr><td>-fcs32 / -nofcs32</td>
|
|
<td>Enable/disable the FCS-32 algorithm.</td></tr>
|
|
|
|
<tr><td>-fnv32 / -nofnv32</td>
|
|
<td>Enable/disable the FNV-32 algorithm.</td></tr>
|
|
|
|
<tr><td>-fnv64 / -nofnv64</td>
|
|
<td>Enable/disable the FNV-64 algorithm.</td></tr>
|
|
|
|
<tr><td>-ghash3 / -noghash3</td>
|
|
<td>Enable/disable the GHash-3 algorithm.</td></tr>
|
|
|
|
<tr><td>-ghash5 / -noghash5</td>
|
|
<td>Enable/disable the GHash-5 algorithm.</td></tr>
|
|
|
|
<tr><td>-gost / -nogost</td>
|
|
<td>Enable/disable the GOST-Hash algorithm.</td></tr>
|
|
|
|
<tr><td>-haval3 / -nohaval3</td>
|
|
<td>Enable/disable the HAVAL-3-256 algorithm.</td></tr>
|
|
<tr><td>-haval4 / -nohaval4</td>
|
|
<td>Enable/disable the HAVAL-4-256 algorithm.</td></tr>
|
|
<tr><td>-haval5 / -nohaval5</td>
|
|
<td>Enable/disable the HAVAL-5-256 algorithm.</td></tr>
|
|
|
|
<tr><td>-md2 / -nomd2</td>
|
|
<td>Enable/disable the MD2 algorithm.</td></tr>
|
|
<tr><td>-md4 / -nomd4</td>
|
|
<td>Enable/disable the MD4 algorithm.</td></tr>
|
|
<tr><td>-md5 / -nomd5</td>
|
|
<td>Enable/disable the MD5 algorithm.</td></tr>
|
|
|
|
<tr><td>-rmd120 / -normd120</td>
|
|
<td>Enable/disable the RipeMD-120 algorithm.</td></tr>
|
|
<tr><td>-rmd160 / -normd160</td>
|
|
<td>Enable/disable the RipeMD-160 algorithm.</td></tr>
|
|
|
|
<tr><td>-sha1 / -nosha1</td>
|
|
<td>Enable/disable the SHA-1 algorithm.</td></tr>
|
|
<tr><td>-sha256 / -nosha256</td>
|
|
<td>Enable/disable the SHA-256 algorithm.</td></tr>
|
|
<tr><td>-sha384 / -nosha384</td>
|
|
<td>Enable/disable the SHA-384 algorithm.</td></tr>
|
|
<tr><td>-sha512 / -nosha512</td>
|
|
<td>Enable/disable the SHA-512 algorithm.</td></tr>
|
|
|
|
<tr><td>-size32 / -nosize32</td>
|
|
<td>Enable/disable the Size-32 algorithm (simply the byte-count of the message).</td></tr>
|
|
|
|
<tr><td>-tiger / -notiger</td>
|
|
<td>Enable/disable the TIGER algorithm.</td></tr>
|
|
|
|
<tr><td>-xum32 / -noxum32</td>
|
|
<td>Enable/disable the XUM32 algorithm.</td></tr>
|
|
|
|
</table>
|
|
<br><br>
|
|
|
|
<h2><a name="rebench">Usage: Benchmarking</a></h2>
|
|
|
|
ReHash supports benchmarking. Execute ReHash like this to start a benchmark:<br>
|
|
<pre>rehash -bench</pre>
|
|
On my 850 MHz processor, ReHash outputs such a table:<br>
|
|
|
|
<pre>Algorithm | Hash length | Hashed bytes/second
|
|
============================================================
|
|
Adler32 | 32 bits | 37 MB
|
|
CRC16 | 16 bits | 35 MB
|
|
CRC16-CCITT | 16 bits | 35 MB
|
|
CRC16-XMODEM | 16 bits | 23 MB
|
|
CRC32 | 32 bits | 56 MB
|
|
CRC64 | 64 bits | 20 MB
|
|
ED2K | 128 bits | 68 MB
|
|
ELF32 | 32 bits | 36 MB
|
|
FCS16 | 16 bits | 35 MB
|
|
FCS32 | 32 bits | 54 MB
|
|
etc...</pre>
|
|
|
|
<h2><a name="rethanks">Thanks / acknowledgements</a></h2>
|
|
Thanks to (in no particular order):
|
|
<ul>
|
|
<li>Rafael Vuijk - Great source code contributions and help</li>
|
|
<li>David R. Tribble - Advanced filename pattern matching code</li>
|
|
<li>Markku-Juhani O. Saarinen - Original GOST-Hash implementation</li>
|
|
<li>Yuliang Zheng - Original HAVAL implementation</li>
|
|
<li>Wei Dai - Original implementations of various algorithms</li>
|
|
<li>Dr Brian Gladman - Original SHA-1/SHA-2 implementation</li>
|
|
<li>Tom St Denis - Original Tiger implementation</li>
|
|
</ul>
|
|
|
|
|
|
<br>
|
|
|
|
</body>
|
|
</html>
|