Django(SHA-384) Hash
Technical details, regex signatures, and cracking commands for the Django(SHA-384) algorithm.
What is Django(SHA-384)?
Django’s use of **SHA-384**—a truncated variant of the SHA-3 family (specifically Keccak-512) standardized as part of FIPS 202—originates from its integration into the Django web framework (v1.5+) as a password hashing mechanism. Structurally, it follows the Merkle-Damgård paradigm, processing input messages in 1024-bit (128-byte) blocks via a round-based compression function (12 rounds per iteration) to produce a 384-bit (48-byte) hash. Unlike raw SHA-384, Django’s implementation truncates the output to 32 bytes (256 bits) for storage, discarding the least significant bits to mitigate minor collision risks while retaining sufficient entropy for practical security. Its primary use-case lies in password hashing within Django’s `make_password()`/`check_password()` utilities, where it combines the hash with a randomly generated salt (stored alongside the hash) to defend against rainbow table attacks. The framework’s design prioritizes simplicity and compatibility with existing SHA-3 standards, though its truncated output deviates from the full SHA-384 specification.
The vulnerability of Django’s SHA-384 stems from its **truncated output length**, which reduces collision resistance below cryptographic security thresholds—SHA-384’s full 384-bit output would resist preimage attacks at ~2¹⁹² operations, but truncation to 256 bits weakens this to ~2¹²⁸, making it susceptible to brute-force or birthday-attack optimizations. Additionally, while Django applies a salt, the lack of **argon2 or memory-hard algorithms** (unlike modern standards like PBKDF2 with high iterations or bcrypt) allows GPU/ASIC acceleration via tools like Hashcat, which can test millions of hashes per second. The algorithm’s **deterministic nature** (without adaptive work factors) also fails to account for hardware advancements, rendering it vulnerable to timing attacks if not implemented with constant-time comparisons. Finally, the **2023-era obsolescence** of SHA-3 for password hashing—replaced by CRYPTID or scrypt in modern frameworks—exposes Django’s legacy choice to deprecated security practices, despite its initial salted design.
Identifying Django(SHA-384) Hashes
Identifying a hash blindly is often difficult because multiple algorithms can output strings of the exact same length. For example, a standard 32-character hexadecimal string could be MD5, NTLM, MD4, or LM. To definitively identify Django(SHA-384), security researchers analyze the hash against a strict regular expression (regex) signature (shown above) to find structural matches.
How to Crack Django(SHA-384)
If you need to recover the plaintext password for a Django(SHA-384) hash during a penetration test or forensics investigation, you must supply the correct module ID to your cracking software. Use the exact commands provided at the top of this page to target the hash successfully.