endreth / jHasher

A simple Java based tool for text, file, directory hashing/authentication.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

GitHub last commit GitHub GitHub top language GitHub code size in bytes GitHub repo size

jHasher v1.0.2

github1

A Java-based software implementing modern and traditional cryptographic hash functions.

The jHasher software is capable of calculating hash values for files and directories, and comparing them. It is a user-friendly, platform-independent, easily extensible, intuitive, and convenient tool for this purpose. jHasher was developed in Java (Java JDK 18), an object-oriented language that guarantees platform independence. It employs the Model View Controller (MVC) pattern to ensure extensibility and scalability with additional hash functions. jHasher implements multi-threaded hashing functions using the Abstract Factory Pattern. The Graphical User Interface (GUI) of jHasher was created using the JavaFX API (JavaFX 18), which provides visually appealing and user-friendly interfaces. The Apache Maven project management tool and the IntelliJ IDEA development environment were used to build jHasher and run tests.

jHasher includes 32 salted and unsalted hash functions, including traditional functions like MD2, MD5, and SHA-1, as well as more advanced and secure functions such as Blake2, Argon2, and BCrypt. With jHasher, users can generate unique hash values for texts and passwords by breaking the input data into one or more parts. Users can also obtain a unique hash value for a single directory or even an entire directory (master hash), or generate separate hash values for each file in a directory. jHasher also allows users to compare files or directories using the generated hash values.

The current version of JHasher is 1.0.2 (last major update: 2023.02.23).

Requirements

GNU/Linux, Microsoft Windows, or macOS (tested on Windows 10)
JRE (JDK 11 or later) (preferably 18+)

Usage

Get the JAR artifact HERE! (You must have JRE installed!)

Running jHasher from the command line:

$ java -jar jHasher-1.0.2.jar

Hash functions (in current version)

[recommended for texts/passwords: ☆; for files and directories: ★]

  • Non-salted
    • SHA-1 family (SHA-1, SHA-224, SHA-256, SHA-384, SHA-512) ☆ ★
    • SHA-3 family (SHA3-224, SHA3-256, SHA3-384, SHA3-512) ☆ ★
    • MD family (MD2, MD5) ☆ ★ (MD2 slow!)
    • Blake family (Blake2b, Blake3) ☆
    • TIGER ☆
  • Salted
    • SHA-1 family (SHA-1, SHA-224, SHA-256, SHA-384, SHA-512) ☆ ★
    • SHA-3 family (SHA3-224, SHA3-256, SHA3-384, SHA3-512) ☆ ★
    • MD family (MD2, MD5) ☆ ★ (MD2 slow!)
    • Blake family (Blake2b, Blake3) ☆ ★
    • Argon family (Argon2id) ☆
    • PBKDF2 ☆
    • TIGER ☆
    • BCrypt ☆
    • SCrypt ☆
Usage details [Tab functions]

In the current version of the program, the following options are available:

['Text'] Hashing of passwords and texts. The string size is limited to 5000 characters. There are 18 salted and 14 unsalted functions to choose from. The input string can be split by a separator, converted to lowercase, and normalized by removing accents and diacritical marks. A single hash fingerprint is generated if the Line-by-Line option is not selected.

['File'] Hashing of a file. The file size is limited to 3 GB. There are 13 salted and 13 unsalted functions to choose from. It does not include functions designed for password hashing (which use permutation or are inherently salted, e.g. BCrypt, SCrypt). A single hash fingerprint is generated for the selected file.

['Directory'] Hashing of the 1st level of a directory (non-recursive). The size of individual files is limited to 3 GB. There are 13 salted and 13 unsalted functions to choose from. It does not include functions designed for password hashing (which use permutation or are inherently salted, e.g. BCrypt, SCrypt). A single hash fingerprint is generated for the selected directory. It will hash the items in the directory and calculate a master hash (top hash) based on the "hash list" principle.

['Multiple Files (Dirs)'] Hashing of the 1st level of a directory (non-recursive). The size of individual files is limited to 3 GB. 13 salted and 13 unsalted functions can be selected. It does not include functions designed for password hashing (which use permutation or are inherently salted, e.g. BCrypt, SCrypt). One hash fingerprint is generated for each file in the directory. The directory may contain "infinitely many" files.

['Compare Files'] Hashing of two files and comparison of their fingerprints. The file size is limited to 3 GB. 13 salted and 13 unsalted functions can be selected. It does not include functions designed for password hashing (which use permutation or are inherently salted, e.g. BCrypt, SCrypt). One hash fingerprint is generated for each file, and their values are compared. If the fingerprints match, they are marked in red; if not, they are marked in green.

['Compare Dirs'] Hashing of the 1st level of two directories (non-recursive). The size of individual files is limited to 3 GB. 13 salted and 13 unsalted functions can be selected. It does not include functions designed for password hashing (which use permutation or are inherently salted, e.g. BCrypt, SCrypt). One hash fingerprint is generated for each file, and their values are compared. If the fingerprints match, they are marked in red; if not, they are marked in green. The directory may contain "infinitely many" files.

Acknowledgment
The hash implementations used in this program are sourced from a variety of libraries and APIs, including the Java Cryptography Extension (JCE-JCA), the Bouncy Castle Crypto API, the Spring Security API, as well as proprietary code developed by Rctcwyvrn (Lily) and Phxql (Moritz Halbritter).
An acknowledgement should be made to Tamás M. Fülöp (forensic IT expert) and Roland Dandi (Java programmer) for their invaluable guidance and support throughout the project, as well as for their valuable insights shared during discussions. Last, acknowledgement should be made to Mouse0w0 for creating the DaraculaFX theme.
The projects of QuickHash and Jacksum should also be mentioned, as they provided valuable inspiration and ideas that contributed to the development of this project.

github2 The UI design was created with Balsamiq Wireframes.

About

A simple Java based tool for text, file, directory hashing/authentication.

License:GNU General Public License v3.0


Languages

Language:Java 100.0%