hashgen - Cyclone's hash generator

April 14, 2026 ยท View on GitHub

Readme Card

Go Report Card GitHub issues License GitHub release Go Reference

Install latest published release:

go install github.com/cyclone-github/hashgen@latest

Install latest source code (bleeding edge):

go install github.com/cyclone-github/hashgen@main

hashgen - Cyclone's hash generator

$ hashgen -m md5 -w rockyou.txt -b
2026/04/11 12:28:58 Starting...
2026/04/11 12:28:58 Processing file: /media/ramdisk/rockyou.txt
2026/04/11 12:28:58 Hash function: 0
2026/04/11 12:28:58 CPU Threads: 16
2026/04/11 12:28:58 Finished processing 14344391 lines in 0.446 sec (32.127 M lines/sec)

Hashgen has a top recorded hashrate of 32.127 million md5/sec on the test rig's Ryzen 7 3700X CPU. (see benchmarks) Much faster hashrates have been seen on newer / faster 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:

  • Maintains original input order PR 10
  • Supports 100+ modes/functions (see list below)
  • Encode / decode base64, base58, base32
  • Hex / dehex wordlists
  • Supports ASCII, UTF-8 and $HEX[] input
  • Supports UTF-8 (default) or $HEX[] output
  • Supports multiple salted modes
  • Supports HMAC, KDF, scrypt, bcrypt, linux shadow modes, checksums, morsecode, etc
Useage ExamplesCommand 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 stdoutcat wordlist.txt | ./hashgen -m md5
decode $HEX[] wordlist to plaintext./hashgen -m plaintext -w hex_wordlist.txt
convert wordlist to $HEX[]./hashgen -m hex -w wordlist.txt
output hash:plain./hashgen -m md5 -w wordlist.txt -hashplain
benchmark md5./hashgen -m md5 -w wordlist.txt -b

Supported Options:

Flag:Description:
-m{mode}
-w{wordlist input}
-t{cpu threads}
-o{wordlist output}
-b{benchmark mode}
-i{iterations - PBKDF2}
-cost{bcrypt}
-hashplain{generates hash:plain pairs}
-help{help menu}
-version{version info}

Supported Functions:

Function:Hashcat Mode:
Plaintext & Encoding
plaintext / dehex99999 (decode $HEX[])
hex(encode to $HEX[])
base32decode
base32encode
base58decode
base58encode
base64decode
base64encode
morsecode(ITU-R M.1677-1)
morsedecode(ITU-R M.1677-1)
Checksums
crc32
11500(hashcat compatible CRC32)
crc64
MDx
md4900
md50
md5md52600
halfmd55100
md5passsalt10
md5saltpass20
30(hashcat compatible md5 utf16le(pass).pass).salt)
40(hashcat compatible md5 salt.utf16le(salt.utf16le(pass))
50(hashcat compatible HMAC-MD5 key = $pass)
60(hashcat compatible HMAC-MD5 key = $salt)
70(hashcat compatible md5 utf16le($pass))
MD6
md6-128
md6-224
md6-25634600
md6-384
md6-512
SHA1
sha1100
sha1sha14500
sha1passsalt110
sha1saltpass120
130(hashcat compatible sha1 utf16le(pass).pass).salt)
140(hashcat compatible sha1 salt.utf16le(salt.utf16le(pass))
150(hashcat compatible HMAC-SHA1 key = $pass)
160(hashcat compatible HMAC-SHA1 key = $salt)
170(hashcat compatible sha1 utf16le($pass))
SHA2
sha2241300
sha224passsalt1310
sha224saltpass1320
sha2561400
sha256passsalt1410
sha256saltpass1420
1430(hashcat compatible sha256 utf16le(pass).pass).salt)
1440(hashcat compatible sha256 salt.utf16le(salt.utf16le(pass))
1450(hashcat compatible HMAC-SHA256 key = $pass)
1460(hashcat compatible HMAC-SHA256 key = $salt)
1470(hashcat compatible sha256 utf16le($pass))
sha38410800
sha384passsalt10810
sha384saltpass10820
sha5121700
sha512passsalt1710
sha512saltpass1720
1730(hashcat compatible sha512 utf16le(pass).pass).salt)
1740(hashcat compatible sha512 salt.utf16le(salt.utf16le(pass))
1750(hashcat compatible HMAC-SHA512 key = $pass)
1760(hashcat compatible HMAC-SHA512 key = $salt)
1770(hashcat compatible sha512 utf16le($pass))
sha512-224
sha512-256
SHA3
sha3-22417300
sha3-25617400
sha3-38417500
sha3-51217600
Keccak
keccak-22417700
keccak-25617800
keccak-38417900
keccak-51218000
BLAKE2
blake2s-256
31000(hashcat compatible BLAKE2s-256)
33300(hashcat compatible HMAC-BLAKE2s key = $pass)
blake2b-256
34800(hashcat compatible BLAKE2b-256)
blake2b-384
blake2b-512
600(hashcat compatible BLAKE2b-512)
610(hashcat compatible BLAKE2b-512 pass.salt)
620(hashcat compatible BLAKE2b-512 salt.pass)
34810(hashcat compatible BLAKE2b-256 pass.salt)
34820(hashcat compatible BLAKE2b-256 salt.pass)
Other Hashes
ntlm1000 (Windows NT)
mysql4/mysql5300
ripemd-1606000
6050(hashcat compatible HMAC-RIPEMD160 key = $pass)
6060(hashcat compatible HMAC-RIPEMD160 key = $salt)
Crypt / KDF
argon2id34000
bcrypt3200
wpbcrypt(WordPress bcrypt-HMAC-SHA384)
md5crypt500 (Linux shadow \$1$)
sha256crypt7400 (Linux shadow \$5$)
sha512crypt1800 (Linux shadow \$6$)
phpass400 (PHP/WordPress $P$/phpBB3 $H$)
yescrypt(Linux shadow $y$)
scrypt8900
10900(hashcat compatible PBKDF2-HMAC-SHA256)
11900(hashcat compatible PBKDF2-HMAC-MD5)
12000(hashcat compatible PBKDF2-HMAC-SHA1)
12100(hashcat compatible PBKDF2-HMAC-SHA512)

Benchmarks:

Compile from source:

  • This assumes you have Go and Git installed
    • git clone https://github.com/cyclone-github/hashgen.git # clone repo
    • cd hashgen # enter project directory
    • go mod init hashgen # initialize Go module (skips if go.mod exists)
    • go mod tidy # download dependencies
    • go build -ldflags="-s -w" . # compile binary in current directory
    • go install -ldflags="-s -w" . # compile binary and install to $GOPATH
  • Compile from source code how-to:

Changelog:

Mentions:

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.
  • If you found hashgen to be helpful, please consider giving this repository a star!