Features
Rainbow-Table Resistant
Each unique input generates a unique salt, making precomputed tables useless
No Salt Storage
Salt is derived from input - nothing extra to store or lose
Deterministic
Same input always produces same hash - essential for verification
Leet-Speak Transform
a→4, e→3, i→1, o→0, s→5, t→7 then reverse for salt derivation
Installation
import "github.com/Snider/Enchantrix/pkg/crypt"
cryptService := crypt.NewService()
lthnHash := cryptService.Hash(crypt.LTHN, input)
Usage
Algorithm
Input: "password"
Step 1: Leet transform
p→p, a→4, s→5, s→5, w→w, o→0, r→r, d→d
= "p455w0rd"
Step 2: Reverse for salt
= "dr0w554p"
Step 3: Hash(input + salt)
= SHA256("password" + "dr0w554p")
= final hash
Security Properties
- Rainbow tables need separate entry for every possible input
- Salt is not secret - it's derivable, but that's fine
- Collision resistance inherited from underlying hash (SHA-256)
Quick Links
More from Lethean R&D Labs
Fancy helping out?
Spotted a bug? Got an idea? We'd love to hear from you.
Read the contributing guide →