1.\" $FreeBSD$ 2.Dd February 6, 2023 3.Dt MD5 1 4.Os 5.Sh NAME 6.Nm md5 , sha1 , sha224 , sha256 , sha384 , 7.Nm sha512 , sha512t224 , sha512t256 , 8.Nm rmd160 , skein256 , skein512 , skein1024 , 9.Nm md5sum , sha1sum , sha224sum , sha256sum , sha384sum , 10.Nm sha512sum , sha512t224sum , sha512t256sum , 11.Nm rmd160sum , skein256sum , skein512sum , skein1024sum 12.Nd calculate a message-digest fingerprint (checksum) for a file 13.Sh SYNOPSIS 14.Nm 15.Op Fl pqrtx 16.Op Fl c Ar string 17.Op Fl s Ar string 18.Op Ar 19.Pp 20.Nm md5sum 21.Op Fl pqrtx 22.Op Fl c Ar file 23.Op Fl s Ar string 24.Op Ar 25.Pp 26(All other hashes have the same options and usage.) 27.Sh DESCRIPTION 28The 29.Nm md5 , sha1 , sha224 , sha256 , sha384 , sha512 , sha512t224 , sha512t256 , 30.Nm rmd160 , skein256 , skein512 , 31and 32.Nm skein1024 33utilities take as input a message of arbitrary length and produce as 34output a 35.Dq fingerprint 36or 37.Dq message digest 38of the input. 39The 40.Nm md5sum , sha1sum , sha224sum , sha256sum , sha384sum , sha512sum , 41.Nm sha512t224sum , sha512t256sum , rmd160sum , skein256sum , skein512sum , 42and 43.Nm skein1024sum 44utilities do the same, but default to the reversed format of 45the 46.Fl r 47flag. 48It is conjectured that it is computationally infeasible to 49produce two messages having the same message digest, or to produce any 50message having a given prespecified target message digest. 51The SHA-224 , SHA-256 , SHA-384 , SHA-512, RIPEMD-160, 52and SKEIN 53algorithms are intended for digital signature applications, where a 54large file must be 55.Dq compressed 56in a secure manner before being encrypted with a private 57(secret) 58key under a public-key cryptosystem such as RSA. 59.Pp 60The MD5 and SHA-1 algorithms have been proven to be vulnerable to practical 61collision attacks and should not be relied upon to produce unique outputs, 62.Em nor should they be used as part of a cryptographic signature scheme. 63As of 2017-03-02, there is no publicly known method to 64.Em reverse 65either algorithm, i.e., to find an input that produces a specific 66output. 67.Pp 68SHA-512t256 is a version of SHA-512 truncated to only 256 bits. 69On 64-bit hardware, this algorithm is approximately 50% faster than SHA-256 but 70with the same level of security. 71The hashes are not interchangeable. 72.Pp 73SHA-512t224 is identical to SHA-512t256, but with the digest truncated 74to 224 bits. 75.Pp 76It is recommended that all new applications use SHA-512 or SKEIN-512 77instead of one of the other hash functions. 78.Pp 79The following options may be used in any combination and must 80precede any files named on the command line. 81The hexadecimal checksum of each file listed on the command line is printed 82after the options are processed. 83.Bl -tag -width indent 84.It Fl b 85Make the 86.Nm -sum 87programs separate hash and digest with a blank followed by an asterisk instead 88of by 2 blank characters for full compatibility with the output generated by the 89coreutils versions of these programs. 90.It Fl c Ar string 91If the program was called with a name that does not end in 92.Nm sum , 93compare the digest of the file against this string. 94If combined with the 95.Fl q 96option, the calculated digest is printed in addition to the exit status being set. 97.Pq Note that this option is not yet useful if multiple files are specified. 98.It Fl c Ar file 99If the program was called with a name that does end in 100.Nm sum , 101the file passed as argument must contain digest lines generated by the same 102digest algorithm with or without the 103.Fl r 104option 105.Pq i.e., in either classical BSD format or in GNU coreutils format . 106A line with the file name followed by a colon 107.Dq ":" 108and either OK or FAILED is written for each well-formed line in the digest file. 109If applicable, the number of failed comparisons and the number of lines that were 110skipped since they were not well-formed are printed at the end. 111The 112.Fl q 113option can be used to quiesce the output unless there are mismatched entries in 114the digest. 115.Pp 116.It Fl s Ar string 117Print a checksum of the given 118.Ar string . 119.It Fl p 120Echo stdin to stdout and append the checksum to stdout. 121.It Fl q 122Quiet mode \(em only the checksum is printed out. 123Overrides the 124.Fl r 125option. 126.It Fl r 127Reverses the format of the output. 128This helps with visual diffs. 129Does nothing 130when combined with the 131.Fl ptx 132options. 133.It Fl t 134Run a built-in time trial. 135For the 136.Nm -sum 137versions, this is a nop for compatibility with coreutils. 138.It Fl x 139Run a built-in test script. 140.El 141.Sh EXIT STATUS 142The 143.Nm md5 , sha1 , sha224 , sha256 , sha512 , sha512t256 , rmd160 , 144.Nm skein256 , skein512 , 145and 146.Nm skein1024 147utilities exit 0 on success, 1481 if at least one of the input files could not be read, 149and 2 if at least one file does not have the same hash as the 150.Fl c 151option. 152.Sh EXAMPLES 153Calculate the MD5 checksum of the string 154.Dq Hello . 155.Bd -literal -offset indent 156$ md5 -s Hello 157MD5 ("Hello") = 8b1a9953c4611296a827abf8c47804d7 158.Ed 159.Pp 160Same as above, but note the absence of the newline character in the input 161string: 162.Bd -literal -offset indent 163$ echo -n Hello | md5 1648b1a9953c4611296a827abf8c47804d7 165.Ed 166.Pp 167Calculate the checksum of multiple files reversing the output: 168.Bd -literal -offset indent 169$ md5 -r /boot/loader.conf /etc/rc.conf 170ada5f60f23af88ff95b8091d6d67bef6 /boot/loader.conf 171d80bf36c332dc0fdc479366ec3fa44cd /etc/rc.conf 172.Pd 173The 174.Nm -sum 175variants put 2 blank characters between hash and file name for full compatibility 176with the coreutils versions of these commands. 177.Ed 178.Pp 179Write the digest for 180.Pa /boot/loader.conf 181in a file named 182.Pa digest . 183Then calculate the checksum again and validate it against the checksum string 184extracted from the 185.Pa digest 186file: 187.Bd -literal -offset indent 188$ md5 /boot/loader.conf > digest && md5 -c $(cut -f2 -d= digest) /boot/loader.conf 189MD5 (/boot/loader.conf) = ada5f60f23af88ff95b8091d6d67bef6 190.Ed 191.Pp 192Same as above but comparing the digest against an invalid string 193.Pq Dq randomstring , 194which results in a failure. 195.Bd -literal -offset indent 196$ md5 -c randomstring /boot/loader.conf 197MD5 (/boot/loader.conf) = ada5f60f23af88ff95b8091d6d67bef6 [ Failed ] 198.Ed 199.Pp 200If invoked with a name ending in 201.Nm -sum 202the 203.Fl c 204option does not compare against a hash string passed as parameter. 205Instead, it expects a digest file, as created under the name 206.Pa digest 207for 208.Pa /boot/loader.conf 209in the example above. 210.Bd -literal -offset indent 211$ md5 -c digest /boot/loader.conf 212/boot/loader.conf: OK 213.Ed 214.Pp 215The digest file may contain any number of lines in the format generated with or without the 216.Fl r 217option 218.Pq i.e., in either classical BSD format or in GNU coreutils format . 219If a hash value does not match the file, FAILED is printed instead of OK. 220.Sh SEE ALSO 221.Xr cksum 1 , 222.Xr md5 3 , 223.Xr ripemd 3 , 224.Xr sha 3 , 225.Xr sha256 3 , 226.Xr sha384 3 , 227.Xr sha512 3 , 228.Xr skein 3 229.Rs 230.%A R. Rivest 231.%T The MD5 Message-Digest Algorithm 232.%O RFC1321 233.Re 234.Rs 235.%A J. Burrows 236.%T The Secure Hash Standard 237.%O FIPS PUB 180-2 238.Re 239.Rs 240.%A D. Eastlake and P. Jones 241.%T US Secure Hash Algorithm 1 242.%O RFC 3174 243.Re 244.Pp 245RIPEMD-160 is part of the ISO draft standard 246.Qq ISO/IEC DIS 10118-3 247on dedicated hash functions. 248.Pp 249Secure Hash Standard (SHS): 250.Pa https://www.nist.gov/publications/secure-hash-standard-shs 251.Pp 252The RIPEMD-160 page: 253.Pa https://homes.esat.kuleuven.be/~bosselae/ripemd160.html 254.Sh BUGS 255All of the utilities that end in 256.Sq sum 257are intended to be compatible with the GNU coreutils programs. 258However, the long option functionality is not provided. 259.Sh ACKNOWLEDGMENTS 260This program is placed in the public domain for free general use by 261RSA Data Security. 262.Pp 263Support for SHA-1 and RIPEMD-160 has been added by 264.An Oliver Eikemeier Aq Mt eik@FreeBSD.org . 265