jsonhash 0.1.0

A tool to generate hash values for files. SHA256 and MD5. Output and Error messages in JSON format.
Documentation

jsonhash

A command-line tool to compute hash of file content and filepath, returning the result as JSON.

Supported hashing algorithms

  • SHA256: Recommended to avoid collision. By default.
  • MD5: Fast (but unsafe) - suitable for files - provided for compatibility/legacy purposes

Features

  • Supports both SHA256 and MD5 hash algorithms
  • Computes hash of file content
  • Computes hash of absolute filepath
  • Computes hash of short path (relative to current directory). Useful to create bucket/file ids.
  • Returns all information in JSON format

Usage

  • The -a|--alg flag is optional. SHA256 by default

Compute SHA256 hash (default)

jsonhash <filepath>

Compute MD5 hash

jsonhash -a md5 <filepath>
jsonhash --alg md5 <filepath>

Compute SHA256 hash (explicit)

jsonhash -a sha256 <filepath>
jsonhash -alg sha256 <filepath>

Output Format

The tool returns a JSON object with the following fields:

  • absfilepath: Absolute path of the file
  • hash: Hash of the file content
  • filename: Name of the file
  • shortpath: Short path relative to current directory
  • alg: Algorithm used (sha256 or md5)
  • pathid: Hash of the absolute filepath
  • shortpathid: Hash of the short path
  • status: Status of the operation (OK or ERROR)
  • message: Error message if status is ERROR. Empty if successful.

Example

jsonhash test.txt

Returns:

{
  "absfilepath": "/home/user/test.txt",
  "hash": "8a8ee87a279ef688b4e1200ee8730d7edaf8231b04a2c2570f802190507cda56",
  "filename": "test.txt",
  "shortpath": "user/test.txt",
  "alg": "sha256",
  "pathid": "a1b2c3d4e5f6...",
  "shortpathid": "f6e5d4c3b2a1...",
  "status": "OK",
  "message": ""
}

Error messages

  • Error messages are provided in json format
  • Error messages:
    • HASH-DIGEST-COMPUTATION-ERROR: An error occured during the computation of the hash digest
    • HASH-ALGORITHM-INVALID: You are specifying an incorrect hash algorithm
    • NOT-A-FILE: The filepath is not a file (is a directory)
    • FILE-DOES-NOT-EXIST : The file does not exist
    • FILE-OPENING-ERROR : The file cannot be opened
{
  "status": "ERROR",
  "message": "{error-message}"
}

Dependencies

  • Rust
  • sha2 crate for SHA256 hashing
  • md5 crate for MD5 hashing
  • clap for command-line argument parsing
  • serde for JSON serialization
  • tempfile for testing

Building

cargo build --release

Testing

cargo test

- A test.txt sample file is included: `test.txt`
- A bash test script that uses the sample file is included: `test_hash.sh`

## License
[MIT](mit.txt) or [Apache2](license.txt)

## Author
[David HEURTEVENT - frua.fr](https://github.com/fruafr)