Skip to main content

Command Palette

Search for a command to run...

Random Password Generator with Python

Published
•6 min read•View as Markdown
Random Password Generator with Python
A

Abdulquadri Saka-Bolanta is a Cyber Security professional with proven expertise across security operations, penetration testing, vulnerability assessment, cloud security, and incident response. He is deeply engaged in researching emerging threats and developing innovative solutions. He tweets @SakaBolanta and share insights from his research and fail-forward approach to cybersecurity through his blog at secopsbro.com.

The goal of this exercise is to write a code that generates a Random Password with Python.

The function is named randomPassword, and it generates a random password that takes no parameters.

The password criteria are as follows:

  • The password will have a random length of between 7 and 10 characters.

  • Each character will be randomly selected from positions 33 to 126 from the ASCII table.

Solution

# coding: utf-8

# In[46]:

def randomPassword():

    """
    A function to randomly generate password with a length between 7 and 10.

    Input:
    No input

    Return:
    password - the generated password.
    """

    from random import randint # Importing the random generator function

    # CONSTANTS
    MIN_PASSWORD_LENGTH = 7
    MAX_PASSWORD_LENGTH = 10
    MIN_ASCII = 33
    MAX_ASCII = 126

    # Obtaining a random password length within the limits specified in the constants
    password_length = randint(MIN_PASSWORD_LENGTH, MAX_PASSWORD_LENGTH)

    # Array for storing the randomly generated password characters
    gen_chars = []

    # The loop for the generation of the random characters
    for _ in range(password_length):

        # Obtaining an ASCII number randomly within the limit of the constants.
        random_ascii = randint(MIN_ASCII, MAX_ASCII)

        # Converting the ASCII number to a character
        new_char = chr(random_ascii)
        # Adding the new character to the array of generated password characters
        gen_chars.append(new_char)

        # End of Loop

    # Joining all the generated characters together to form a string type object
    password = ''.join(gen_chars)

    return password # returning the jointed characters as the password

if __name__ == "__main__":

    # Calling the created function
    mypassword = randomPassword()

    # Displaying the output of the function
    print("Generated password: ", mypassword)

Code Explanation

This Python code defines a function randomPassword() that generates a random password with a length between 7 and 10 characters. Let's break down the code in detail, including explanations and code snippets.

The code is structured into two main parts: the randomPassword() function definition and the if __name__ == "__main__": block, which demonstrates how to use the function.

1. randomPassword() Function

This function is designed to generate a random password.

def randomPassword():
    """
    A function to randomly generate password with a length between 7 and 10.

    Input:
    No input

    Return:
    password - the generated password.
    """
  • def randomPassword():: This line defines a function named randomPassword(). It takes no arguments.

  • Docstring ("""..."""): This is a multi-line string used to explain what the function does, its inputs, and what it returns. It's good practice for documenting code.

    from random import randint # Importing the random generator function
  • from random import randint: This line imports the randint function from Python's built-in random module.

    • randint(a, b): This function returns a random integer N such that a <= N <= b. This is crucial for generating random lengths and random ASCII values.
    # CONSTANTS
    MIN_PASSWORD_LENGTH = 7
    MAX_PASSWORD_LENGTH = 10
    MIN_ASCII = 33
    MAX_ASCII = 126
  • Constants: These variables are defined in uppercase by convention to indicate that their values are not expected to change during the program's execution.

    • MIN_PASSWORD_LENGTH = 7: The minimum allowed length for the generated password.

    • MAX_PASSWORD_LENGTH = 10: The maximum allowed length for the generated password.

    • MIN_ASCII = 33: The minimum ASCII (American Standard Code for Information Interchange) value to consider for password characters. ASCII 33 is the '!' character.

    • MAX_ASCII = 126: The maximum ASCII value to consider for password characters. ASCII 126 is the '~' character.

      • Why ASCII 33 to 126? This range includes printable characters, including numbers (0-9), uppercase letters (A-Z), lowercase letters (a-z), and various symbols (e.g., !, @, #, $, %, ^, &, *). This makes the generated passwords more robust than just using letters and numbers.
    # Obtaining a random password length within the limits specified in the constants
    password_length = randint(MIN_PASSWORD_LENGTH, MAX_PASSWORD_LENGTH)
  • password_length = randint(MIN_PASSWORD_LENGTH, MAX_PASSWORD_LENGTH): This line uses randint to determine the actual length of the password. It will be a random integer between 7 and 10 (10 inclusive).
    # Array for storing the randomly generated password characters
    gen_chars = []
  • gen_chars = []: An empty list named gen_chars is initialized. This list will temporarily store individual characters as they are generated before they are joined together to form the final password string.
    # The loop for the generation of the random characters
    for _ in range(password_length):

        # Obtaining an ASCII number randomly within the limit of the constants.
        random_ascii = randint(MIN_ASCII, MAX_ASCII)

        # Converting the ASCII number to a character
        new_char = chr(random_ascii)

        # Adding the new character to the array of generated password characters
        gen_chars.append(new_char)

        # End of Loop
  • for _ in range(password_length):: This is a for loop that iterates password_length times (e.g., 7 to 10 times, depending on the randomly chosen length).

    • The underscore _ is used as the loop variable when you don't need to use the actual iteration number inside the loop (it's just a placeholder).
  • random_ascii = randint(MIN_ASCII, MAX_ASCII): Inside each iteration, a random integer is generated between MIN_ASCII (33) and MAX_ASCII (126). This integer represents the ASCII code of a character.

  • new_char = chr(random_ascii): The chr() built-in function is used to convert an integer (ASCII value) into its corresponding character. For example, chr(65) returns 'A', chr(97) returns 'a', and chr(48) returns '0'.

  • gen_chars.append(new_char): The newly generated character (new_char) is added to the gen_chars list.

    # Joining all the generated characters together to form a string type object
    password = ''.join(gen_chars)

    return password # returning the jointed characters as the password
  • password = ''.join(gen_chars): After the loop finishes, all the individual characters stored in the gen_chars list are joined together to form a single string. The '' before .join() means that the characters will be joined with an empty string as a separator (i.e., no separation, just concatenated).

  • return password: The function returns the final generated password string.

2. if __name__ == "__main__": Block

This block of code is a standard Python idiom.

if __name__ == "__main__":

    # Calling the created function
    mypassword = randomPassword()

    # Displaying the output of the function
    print("Generated password: ", mypassword)
  • if __name__ == "__main__":: This condition checks if the script is being run directly (as the main program) rather than being imported as a module into another script.

    • If you run your_script.py directly, __name__ will be "__main__".

    • If you import your_script.py into another script (e.g., import your_script), then __name__ in your_script.py will be your_script, and the code inside this block will not execute.

    • This is useful for putting code that should only run when the script is executed as a standalone program (like testing or demonstration code).

  • mypassword = randomPassword(): The randomPassword() function is called, and the returned password string is stored in the mypassword variable.

  • print("Generated password: ", mypassword): This line prints the generated password to the console, prefixed with the label "Generated password: ".