Wordlist Rockyou [work] May 2026
def __init__(self, filepath: Optional[str] = None): """ Initialize the RockYou wordlist manager Args: filepath: Path to rockyou.txt or rockyou.txt.gz file """ self.filepath = self._find_wordlist(filepath) if filepath else self._find_wordlist() self.wordlist = None self.loaded = False def _find_wordlist(self, filepath: Optional[str] = None) -> str: """Find the rockyou wordlist file""" if filepath and os.path.exists(filepath): return filepath for path in self.COMMON_PATHS: expanded_path = os.path.expanduser(path) if os.path.exists(expanded_path): return expanded_path raise FileNotFoundError( "RockYou wordlist not found. Please provide the correct path. " "On Kali Linux: sudo gunzip /usr/share/wordlists/rockyou.txt.gz" )
def find_similar(self, target_password: str, threshold: int = 2) -> List[str]: """ Find similar passwords using Levenshtein distance Args: target_password: Password to compare against threshold: Maximum edit distance Returns: List of similar passwords """ if not self.loaded: self.load() def levenshtein(s1: str, s2: str) -> int: if len(s1) < len(s2): return levenshtein(s2, s1) if len(s2) == 0: return len(s1) previous_row = range(len(s2) + 1) for i, c1 in enumerate(s1): current_row = [i + 1] for j, c2 in enumerate(s2): insertions = previous_row[j + 1] + 1 deletions = current_row[j] + 1 substitutions = previous_row[j] + (c1 != c2) current_row.append(min(insertions, deletions, substitutions)) previous_row = current_row return previous_row[-1] similar = [] for pwd in self.wordlist[:10000]: # Limit for performance distance = levenshtein(target_password, pwd) if distance <= threshold: similar.append(pwd) return similar def demo_rockyou_feature(): """Demonstrate the RockYou wordlist feature"""
@staticmethod def leet_speak(password: str) -> List[str]: """Convert to leet speak variations""" leet_map = { 'a': ['4', '@'], 'e': ['3'], 'i': ['1', '!'], 'o': ['0'], 's': ['5', '$'], 't': ['7'] } variations = [password] for char, replacements in leet_map.items(): new_variations = [] for var in variations: for replacement in replacements: new_variations.append(var.replace(char, replacement)) variations.extend(new_variations) return list(set(variations))[:20] # Limit variations wordlist rockyou
# Common paths where rockyou might be located COMMON_PATHS = [ "/usr/share/wordlists/rockyou.txt", "/usr/share/wordlists/rockyou.txt.gz", "./wordlists/rockyou.txt", "./rockyou.txt", "~/rockyou.txt" ]
try: # Initialize the wordlist manager rockyou = RockYouWordlist() # Load first 1000 passwords for demo print("Loading first 1000 passwords...") passwords = rockyou.load(max_passwords=1000) print(f"Loaded {len(passwords)} passwords\n") # Get statistics print("=== Statistics ===") stats = rockyou.get_statistics() print(f"Total passwords: {stats['total_passwords']}") print(f"Unique passwords: {stats['unique_passwords']}") print(f"Duplicates: {stats['duplicates']}") print("\nTop 10 password lengths:") for length, count in stats['length_distribution'].items(): print(f" Length {length}: {count} passwords") print("\nCharacter type distribution:") for char_type, count in stats['character_types'].items(): print(f" {char_type}: {count}") print("\nTop 5 most common passwords:") for pwd, count in list(stats['common_patterns'].items())[:5]: print(f" '{pwd}': {count} times") # Search functionality print("\n=== Search Examples ===") print("Passwords containing '123':") matches = rockyou.search(r'123') for pwd in matches[:10]: print(f" {pwd}") print("\nPasswords with repeating characters:") matches = rockyou.search(r'(.)\1\1') # Three identical chars in a row for pwd in matches[:10]: print(f" {pwd}") # Filter by length print("\n=== Filtering ===") medium_passwords = rockyou.filter_by_length(min_len=8, max_len=12) print(f"Passwords with 8-12 characters: {len(medium_passwords)}") # Password hashing print("\n=== Password Hashing (MD5) ===") hashes = rockyou.get_hash('md5') for pwd, hash_val in list(hashes.items())[:5]: print(f" {pwd} -> {hash_val}") # Find similar passwords print("\n=== Similar Password Search ===") similar = rockyou.find_similar("password123", threshold=2) print(f"Passwords similar to 'password123': {similar[:10]}") except FileNotFoundError as e: print(f"Error: {e}") print("\nTo get the RockYou wordlist:") print("1. On Kali Linux: sudo gunzip /usr/share/wordlists/rockyou.txt.gz") print("2. Or download from: https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt") class RockYouTransformer: """Transform and mutate passwords from rockyou""" On Kali Linux: sudo gunzip /usr/share/wordlists/rockyou
@staticmethod def capitalize_variations(password: str) -> List[str]: """Generate capitalization variations""" variations = {password.lower(), password.upper(), password.capitalize()} # Title case for words if ' ' in password: variations.add(password.title()) return list(variations) if == " main ": demo_rockyou_feature()
def get_hash(self, hash_type: str = 'md5') -> Dict[str, str]: """ Generate hashes for passwords Args: hash_type: 'md5', 'sha1', 'sha256' Returns: Dictionary mapping password to hash """ if not self.loaded: self.load() hash_func = getattr(hashlib, hash_type) return {pwd: hash_func(pwd.encode()).hexdigest() for pwd in self.wordlist[:1000]} # Limit for performance hash_type: str = 'md5') ->
def stream(self) -> Iterator[str]: """ Stream passwords without loading all into memory Yields: Passwords one by one """ if self.filepath.endswith('.gz'): with gzip.open(self.filepath, 'rt', encoding='latin-1', errors='ignore') as f: for line in f: password = line.strip() if password: yield password else: with open(self.filepath, 'r', encoding='latin-1', errors='ignore') as f: for line in f: password = line.strip() if password: yield password