Features - jonelo/jacksum Wiki

Hash functions

Jacksum supports 472 algorithms. For a full detail list, go to https://github.com/jonelo/jacksum/wiki/Supported-Algorithms

Cryptographic hash functions

  • National and international standards of cryptographic hash functions:

    • United States of America (USA)
      • SHA-3-family: SHA3-[224,256,384,512], SHAKE[128,256] (NIST FIPS 202)
      • SHA-2-family: SHA-[224,256,384,512], SHA-512/[224,256] (NIST FIPS 180-4)
      • SHA-1
    • People's Republic of China (PRC)
      • SM3
    • Russian Federation
      • Streebog-[256,512] (GOST R 34.11-2012)
      • GOST Crypto-Pro (GOST R 34.11-94)
      • GOST (GOST R 34.11-94)
    • Ukraine
      • Kupyna[256,384,512] (DSTU 7564:2014)
    • Republic of Korea (ROK)
      • LSH-256-[224,256], LSH-512-[224,256,384,512] (KS X 3262)
      • HAS-160 (KISA)
  • All 5 candidates from round 3 the NIST SHA-3 competition (2007-2012):

    • BLAKE-[224,256,348,512]
    • Groestl-[224,256,384,512]
    • JH[224,256,284,512]
    • Keccak[224,256,384,512]
    • Skein-256-[8..256], Skein-512-[8..512], Skein-1024-[8..1024]
  • 3 candidates from round 2 of the NIST SHA-3 competition (2007-2012):

    • ECHO-[224,256,348,512]
    • Fugue-[224,256,348,512]
    • Luffa-[224,256,348,512]
  • Proposals from the 2005 NIST workshops before the SHA-3 competition:

    • DHA-256
    • FORK-256
    • VSH-1024
  • International accepted, modern strong cryptographic hash functions:

    • BLAKE2s-[8..256]
    • BLAKE2b-[8..512]
    • BLAKE3
    • ed2k
    • HAVAL-[160,192,224,256]-[3,4,5]
    • RadioGatun[32,64]
    • RIPEMD[160,256,320]
    • Tiger2
    • Whirlpool
  • eXtendable Output Functions (XOF) as cryptographic hash functions with a fixed length:

    • SHAKE128
    • SHAKE256
    • KangarooTwelve
    • MarsupilamiFourteen
  • Broken cryptographic hash functions for education and backwards compatibility purposes:

    • HAVAL-128-[3,4,5]
    • MD2
    • MD4
    • MD5
    • MDC2
    • PANAMA
    • RIPEMD-128
    • SHA-0
    • SHA-1
    • Tiger
    • Tiger/128
    • Tiger/160
    • Whirpool-0
    • Whirlpool-T

Non-cryptographic hash functions

  • CRCs

    • CRC-8 (FLAC)
    • CRC-16 (LHA/ARC), CRC-16 (Minix), FCS-16
    • CRC-24 (OpenPGP)
    • CRC-32 (FCS-32), CRC-32 (MPEG-2), CRC-32 (bzip2), CRC-32 (FDDI), CRC-32 (UBICRC32), CRC-32 (PHP's crc32)
    • CRC-64 (ISO 3309), CRC-64 (ECMA-182), CRC-64 (prog lang GO, const ISO), CRC-64 (.xz and prog lang GO, const ECMA)
  • Classic checksums

    • Adler-32
    • cksum (Minix)
    • cksum (Unix)
    • ELF (Unix)
    • Fletcher's Checksum
    • FNV-0_[32,64,128,256,512,1024], FNV-1_[32,64,128,256,512,1024], FNV-1a_[32,64,128,256,512,1024],
    • joaat
    • sum (BSD Unix), sum (Minix), sum (System V Unix), sum [8,16,24,32,40,48,56]
    • xor8
    • XXH32

Customized hash functions

  • Concatenate algorithms (e.g. sha1+sha256+sha3-256) to obtain a combined hash value

  • The "Rocksoft (tm) Model CRC Algorithm" schema is supported

    • Specify all parameters of that model (width, poly, init, refIn, refOut, xorOut) to get your own CRC
    • Use the extended model of it (suggested by the Jacksum project) to specify CRCs that incorporate the length of the input data (incLen, xorLen)

Multi-core system/multi-CPU support

  • Supports multi-threading on both multi-processor and multi-core computer systems

  • Multiple algorithms

    • Can calculate multiple hashes simultaneously, i.e. files are read only once, and the calculation load is distributed on the available cores
    • The user can control the number of threads if multiple algorithms should run in parallel
  • Multiple files

    • Can read multiple files simultaneously, i.e. files can be read in parallel on SSDs
    • The user can control the number of threads if multiple files should be read in parallel

Algorithm selection

  • Select one, a few, many, or all algorithms for hash calculation, integrity verification or information gathering
  • Specify algorithms manually, or filter them by name or a message digest width

Input related features

  • Recursively directory traversal

    • Processes directories recursively, and allows to limit the depth
    • Detects file system cycles and it avoids endless loops
    • Allows you to control how symbolic links on files and/or directories should be handled on all operating systems
  • Input from almost any source

    • Calculates hashes from files, stdin, file lists, command line argument values on all operating systems: Windows, Linux, Unix (e.g. macOS, BSD)
    • Calculates hashes from disks, and partitions on all operating systems: Windows, Linux, Unix (e.g. macOS, BSD)
    • Calculates hashes from block devices, character devices, named pipes, sockets, and sparse files on all Unix-like operating systems
    • Calculates hashes from NTFS Alternate Data Streams (ADS) on Microsoft Windows
    • Calculates hashes from doors on Solaris
  • Character sets, Unicode and BOM support

    • Full Unicode file name support for input files
    • Allows you to specify the character set for input files: GB18030, UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE, UTF-32LE, etc.
    • Ignores an optional Byte-Order-Mark (BOM) from the input if a BOM is allowed, but not required by the selected charset
  • Correctness of file handling

    • Handles special characters in filenames correctly (e.g. if a filename on Linux ends with a space or if a filename contains backslashes or newline characters)
    • Handles allowed max. length of filenames properly (e.g. 255 max. characters for a filename on Microsoft Windows NTFS file systems)
    • Handles allowed max. length of paths properly (e.g. 32,767 max. characters for the entire path on Microsoft Windows NTFS file systems)
    • It is large file aware, it can process file sizes up to 8 Exbibytes (= 8,000,000,000 Gibibytes), presupposed your operating system respectively your file system is large file aware, too.

Output related features

  • Predefined standard formats

    • Output can occur in predefined standard formats (BSD-, GNU/Linux-, openssl-, and Solaris style, SFV, and FCIV)
    • supports GNU file name escaping
  • User defined formats

    • Use comprehensive format options to get the output you need
    • Create your own format and define a compatibility file to be able to read your own format again
    • Create ed2k-links, magnet-links, Solaris' pkgmap format
    • To represent hash values, one of 16 encodings can be selected:
      • binary
      • decimal
      • octal
      • hex (lower- and uppercase), bytes can also be grouped and separated for easier readability
      • Base16
      • Base32 (with and without padding)
      • Base32hex (with and without padding)
      • Base64 (with and without padding)
      • Base64url (with and without padding)
      • BubbleBabble
      • z-base-32
    • Many different charsets are supported in order to write localized filenames properly (see also options --charset-stdout, --charset-stderr, and --charset-output-file, --charset-error-file).
    • Paths can be customized. See also options -P, --no-path, --path-relative-to, and --path-absolute.
    • Timestamps can be customized. Predefined formats for timestamps such as ISO8601 or Unixtime are available.
  • Character sets, Unicode, and BOM support

    • Full Unicode file name support for output files
    • Allows you to specify the character set for output files: GB18030, UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE, UTF-32LE, etc.
    • Adds an optional Byte-Order-Mark (BOM) to the output if a BOM is allowed, but not required by the selected charset

Integrity verification features

  • Include not only the hash, but also the file size and/or file modification timestamp of files for performing reliable integrity checks
  • Perform integrity checks, and detect ok, failed, missing, and new files
  • Use predefined compatibility files to read and write popular 3rd party format styles (GNU/Linux, BSD, SFV, FCIV, openssl, etc.)
  • Create and use your own compatibility files

Find files by hashes

  • Find all files on a computer that match a given hash value (find the duplicates of a file)
  • Find all files on a computer that match the hash values in a precalculated hash set
  • Find all files on a computer that don't match the hash values in a precalculated hash set

Find the algorithm to a hash

  • Find the algorithm that was used to calculate a checksum/CRC/hash

Cross-platform support

  • Operating Systems

    • Microsoft Windows (e.g. Microsoft Windows 10, and 11)
    • GNU/Linux (e.g. Ubuntu)
    • Unix (e.g. BSD-flavors, macOS, Solaris)
    • any other operating system or architecture with an OpenJDK compatible Java Runtime Environment (JRE) or Java Development Kit (JDK)
  • Supported architectures are dependent on the JDK

    • x86 64 bit (x64)
    • x86 32 bit (x86)
    • ARM 64 bit (AArch64, resp. M1)
    • ARM 32 bit (AArch32)
    • PPC 64 bit (ppc64)
  • written entirely in Java

    • no recompilation required

Interaction with other tools

  • Works with the SendTo-feature on many file browsers (e.g. macOS Finder, Microsoft Windows Explorer, Gnome Nautilus, KDE Konqueror, ROX Filer, etc.)
  • As it has a command line interface, Jacksum can be used in cronjobs and autostart environments
  • Jacksum returns an exit status which is dependent on the result of the calculation/verification process, so you can use Jacksum in scripts and batches and control the code flow in your own scripts
  • Use predefined compatibility files to read and write popular 3rd party format styles in order to interact with other tools (GNU/Linux, BSD, SFV, FCIV, openssl, etc.)

Other

  • The program is mature and very stable
  • Specify your preferred level of verbosity
  • Obtain details for each algorithm, including comprehensive compatibility lists

Developer support

  • Entire source code has been opened, is hosted on GitHub, and accessible using git
  • The project has been mavenized with a pom.xml which makes it easy to work in your preferred IDE
  • Jacksum provides an API, so you can incorporate Jacksum in your own projects
  • Javadoc is available
  • Jacksum keeps compatibility with JDK 11, but it takes all the advantages of JDK 11+ if available