EntroPy Password Generator

A secure and customizable password generator written in Python

License: MIT
Made with Python
Entropy Compliant
Maintained: Yes 2025
Generator Views
⚠️ Warning: Do not attempt to memorize passwords generated by this tool. Instead, use a reliable password manager, such as Bitwarden. The only password you should memorize is the master password for your password manager's vault.

🔧 Password Generator

🎨 Block III Custom
Customizable length (15-128 characters) with all character types
🧩 Block I & II I II
Predefined modes 1-20 with specific configurations
Custom Mode (Block III): Configure length and character types according to your needs
72
72
15 128
Your password will appear here
Length: -
Entropy: - bits
Strength: -
Mode: -

📊 Password Mode Blocks

Block I Modes 1-10
With ambiguous characters, fixed length of 24 characters
Ideal for general-purpose passwords where slight loss of readability is acceptable for higher entropy.
Block II Modes 11-20
Mixed configurations, various lengths (15-128 characters)
For sensitive applications, excluding ambiguous characters for better readability.
Block III Custom Mode
Customizable length (15-128 characters)
Full control over all configurations. Use when predefined modes don't meet your specific needs.

Predefined Modes Table

Mode Block Length Character Set Entropy (bits) Security Level
11 II 15 All (no ambiguous) 95.10 Strong
13, 14 II 20 Lowercase/Uppercase + Digits 99.08 Strong
1-10 I 24 Varies by mode 124-151 Very Strong
15-20 II 24-128 All (no ambiguous) 152-811 Extremely Strong
Custom III 15-128 Configurable 97-833 Variable

💻 Python Code

EntroPy Password Generator Implementation - Block III (Custom)

# Example usage of Block III - Custom Mode
# Command: python3 entropy_password_generator.py --block 3 --length 72 --uppercase --lowercase --numbers --symbols --avoid-ambiguous

import secrets
import string
import argparse
import math

def generate_custom_password(length, uppercase=True, lowercase=True, numbers=True, symbols=True, avoid_ambiguous=True):
    # Define character sets
    uppercase_chars = string.ascii_uppercase
    lowercase_chars = string.ascii_lowercase
    number_chars = string.digits
    symbol_chars = string.punctuation
    
    # Remove ambiguous characters if requested
    if avoid_ambiguous:
        ambiguous_chars = "Il1O0|`"
        uppercase_chars = ''.join(c for c in uppercase_chars if c not in ambiguous_chars)
        lowercase_chars = ''.join(c for c in lowercase_chars if c not in ambiguous_chars)
        number_chars = ''.join(c for c in number_chars if c not in ambiguous_chars)
        symbol_chars = ''.join(c for c in symbol_chars if c not in ambiguous_chars)
    
    # Build the character pool based on selected options
    char_pool = ""
    if uppercase:
        char_pool += uppercase_chars
    if lowercase:
        char_pool += lowercase_chars
    if numbers:
        char_pool += number_chars
    if symbols:
        char_pool += symbol_chars
    
    # Ensure at least one character type is selected
    if not char_pool:
        raise ValueError("At least one character type must be selected")
    
    # Generate the password
    password = ''.join(secrets.choice(char_pool) for _ in range(length))
    
    # Calculate entropy
    entropy = math.log2(len(char_pool)) * length
    
    return password, entropy

# Example usage
password, entropy = generate_custom_password(
    length=72,
    uppercase=True,
    lowercase=True,
    numbers=True,
    symbols=True,
    avoid_ambiguous=True
)

print(f"Generated Password: {password}")
print(f"Password Length: {len(password)}")
print(f"Entropy: {entropy:.2f} bits")