hashgen - the blazingly fast hash generator
-
Title
: hashgen
Author
: cyclone
URL
: https://github.com/cyclone-github/hashgen
Description
: hashgen - the blazingly fast hash generatorhashgen - Cyclone's hash generator
$ ./hashgen_amd64.bin -m 0 -w rockyou.txt -o /dev/null 2024/12/10 19:07:31 Starting... 2024/12/10 19:07:31 Processing file: rockyou.txt 2024/12/10 19:07:31 Hash function: 0 2024/12/10 19:07:31 CPU Threads: 16 2024/12/10 19:07:31 Finished processing 14344391 lines in 0.475 sec (30.228 M lines/sec)
As of the this writing, hashgen (go) has a 2,519% faster md5 hashrate vs the next fastest publicly available CPU based hash generator (see benchmarks). While this is extremely fast, these hashrates can be beat by improved code optimization and/or coding in faster programming languages (I'm looking at you C, Rust and Zig).
Since version
v2023-10-30.1600
, hashgen has a top recorded hasharate of 30,228,048 md5/sec on the test rig's Ryzen 7 3700X CPU! Much faster hashrates have been seen on higher end CPU's.Hashgen is a CLI hash generator written in Go and can be cross compiled for Linux, Raspberry Pi, Windows & Mac, although testing and compiling is mainly done on debian 12 linux.
To use hashgen, type your mode, wordlist input & hash output files with a simple command line.
Features:
- Supports 30+ modes/functions (see list below)
- Encode / decode base64 & base58
- Hex / dehex wordlists
- Supports ASCII, UTF-8 and $HEX[] wordlist input
Useage Examples Command Line read wordlist.txt, hash to md5 and write to output.txt ./hashgen -m md5 -w wordlist.txt -o output.txt pipe wordlist into hashgen and write to stdout cat wordlist.txt | ./hashgen -m md5 dehex wordlist to plaintext ./hashgen -m dehex -w hex_wordlist.txt convert wordlist to $HEX[] ./hashgen -m hex -w wordlist.txt output hash:plain ./hashgen -m md5 -w wordlist.txt -hashplain Supported Options:
Flag: Description: -m {mode} -w {wordlist input} -t {cpu threads} -o {wordlist output} -cost {bcrypt} -hashplain {generates hash:plain pairs} -help {help menu} -version {version info} Supported Functions:
Function: Hashcat Mode: argon2id (slow algo) base58decode base58encode base64decode base64encode bcrypt 3200 (slow algo) 11500 (hashcat compatible CRC32) crc32 crc64 hex ($HEX[] format) dehex/plaintext 99999 (dehex wordlist) keccak-256 17800 keccak-512 18000 md4 900 md5 0 morsecode (ITU-R M.1677-1) ntlm 1000 ripemd-160 6000 sha1 100 sha2-224 1300 sha2-256 1400 sha2-384 10800 sha2-512 1700 sha2-512-224 sha2-512-256 sha3-224 17300 sha3-256 17400 sha3-384 17500 sha3-512 17600 yescrypt (slow algo) Benchmarks:
- https://github.com/cyclone-github/hashgen-testing/tree/main/benchmarks
- In addition to hashgen (go), I have also written hashgen in python, php, C, and Rust, although Rust and C need a lot of work to unlock their full performance potential. If you speak C or Rust, I'd be curious to see how fast you can push hashgen!
Compile hashgen from source:
- If you want the latest features, compiling from source is the best option since the release version may run several revisions behind the source code.
- This assumes you have Go and Git installed
git clone https://github.com/cyclone-github/hashgen.git
# clone repocd hashgen
# enter project directorygo mod init hashgen
# initialize Go module (skips if go.mod exists)go mod tidy
# download dependenciesgo build -ldflags="-s -w" .
# compile binary in current directorygo install -ldflags="-s -w" .
# compile binary and install to $GOPATH
- Compile from source code how-to:
Changelog:
Mentions:
- Go Package Documentation: https://pkg.go.dev/github.com/cyclone-github/hashgen
- hashcat wiki: https://hashcat.net/wiki/
- hashkiller forum: https://forum.hashkiller.io/index.php?threads/cyclone-hashgen.63140/
- hashpwn forum: https://forum.hashpwn.net/post/89
- MajorGeeks: https://www.majorgeeks.com/files/details/hashgen.html
- Softpedia: https://www.softpedia.com/get/System/File-Management/hashgen-go.shtml
Antivirus False Positives:
- Several antivirus programs on VirusTotal incorrectly detect hashgen as a false positive. This issue primarily affects the Windows executable binary, but is not limited to it. If this concerns you, I recommend carefully reviewing hashgen's source code, then proceed to compile the binary yourself.
- Uploading your compiled hashgen binaries to https://virustotal.com and leaving an upvote or a comment would be helpful.
Thoughts:
- Why write hashgen? hashgen is nothing new (to me) as this project started several years ago while needing a way to quickly convert wordlists to md5 or sha1 on linux terminal. Several versions of hashgen have been written over the years in several languages: python, php, Go, C and Rust. While the actively maintained version is hashgen (go), which offers enhanced features and superior performance, the "hashgen-testing" repository linked below contains testing versions of hashgen in different programming languages:
- Why write hashgen in Go instead of xyz language? I did this to push my Go coding skills while also seeing how fast I could push Go. During early testing, I was not expecting hashgen to be all that fast, but I have been pleasantly surprised!
- When I realized hashgen (go) was competitively fast compared to other publicly available hash generators, I decided to publish hashgen's code and binaries for others to use. I've really enjoyed this project and I hope you find it useful.
-
In the tradition of keeping hashgen blazingly fast, I published an optimized implementation of base58 to GitHub:
https://pkg.go.dev/github.com/cyclone-github/base58Switching hashgen's base58 encode/decode logic to
cyclone/base58
gave a performance increase of 500%.Key features of this base58 package:
- Backwards compatible with other base58 packages using a familiar API based on Go's stdlib
encoding/base64
- Written in pure Go using stdlib with no external dependencies
- Fast, efficient byte-based encoding/decoding
- Backwards compatible with other base58 packages using a familiar API based on Go's stdlib
-
New version of hashgen published.
https://github.com/cyclone-github/hashgen/releases/tag/v1.1.3v1.1.3; 2025-06-30 added mode "hex" for $HEX[] formatted output added alias "dehex" to "plaintext" mode improved "plaintext/dehex" logic to decode both $HEX[] and raw base-16 input