How to Generate Random Strings and Passwords in Python?

By | January 19, 2022
How to Generate Random Strings and Passwords in Python

To generate random data in Python we generally use Python’s random module.  And in this tutorial, you will learn how to use the Python random module to create random strings and passwords.

How to create a random string in Python?

To generate a random string of any length we can use the Python random module.

Here are the steps to create a random string in Python.

Step 1: Import the string and random modules

import string
import random

The string module has different string constant values for all ASCII characters, which include, uppercase & lowercase Alphabets, digits, and special characters or symbols. We will use the string module as a database to get the random characters.

With the random module methods we can pick the random characters from the string module, to generate random string values.

Step 2: Create a string value of lowercase letters

After importing the modules to the script we need to create an identifier of all the letters either lowercase or uppercase from which we will pick the random characters.

Vamware
lowercase_letters = string.ascii_lowercase   #'abcdefghijklmnopqrstuvwxyz'

Step 3: The length of the random string and an empty random string.

Store the length of the random string as  size identifier. And also initialize an empty string that will store the random letters for the random string.

size = 8
random_string = ""

Step 4: Run a loop from range 0 to size

Now we need to run a loop for the total size of the random string.

Vamware

And with each iteration, we will pick a random number from lowercase_letters using the random.choice() function and add it to the random_string.

for i in range(size):
    #pick a random letter
    letter = random.choice(lowercase_letters)
    
    # add the random letter to random_string
    random_string += letter

Example

Let’s put all the steps together and generate a long Python random string.

import string
import random

lowercase_letters = string.ascii_lowercase   #'abcdefghijklmnopqrstuvwxyz'

size = 8
random_string = ""

for i in range(size):
    #pick a random letter
    letter = random.choice(lowercase_letters)
    
    # add the random letter to random_string
    random_string += letter

print("Your Random String is: ", random_string)

Output

Your Random String is: ztaoelsf

In this above example, we only pick the random characters from the lowercase alphabets, we can also use a different set of characters such as uppercase, digits, or special characters. The string module provides different properties for various ASCII characters.

String Properties Description Return Value
string.ascii_lowercase It returns a string of all lowercase letters. ‘abcdefghijklmnopqrstuvwxyz’
string.ascii_uppercase It returns a string of all uppercase letters. ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’
string.ascii_letters It returns a string of all upper and lower case letters. ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’
string.digits It returns a string of numbers from 0 to 9 ‘0123456789’
string.punctuations It returns a string of punctuations or special characters. ‘!”#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~’
string.whitespace It return a string of escape characters such as tab, linefeed, new line etc. ‘ \t\n\r\x0b\x0c’
string.printable It returns a string of all characters that are printable string values. ‘0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!”#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c’

Create a Random String of Lower and Upper case letters

In the above example, we see how can we generate a random string of lowercase letters, now let’s write a Python program that can generate a random string containing upper case and lowercase letters.

To pick the random lowercase and uppercase letters we can either use the string concatenation of string.ascii_lowercases+string.ascii_uppercases or string.ascii_letters.

Vamware

Example

import string
import random

letters = string.ascii_letters  
size = 8
random_string = ""

for i in range(size):
    #pick a random letter
    letter = random.choice(letters)
    
    # add the random letter to random_string
    random_string += letter

print("Your Random String is: ", random_string)

Output

Your Random String is: pwVWSmQE

Create a Random String of  specific letters letters

To create a random string from a specific set of letters we first need to specify all the specific letters as a single string. And with random.choice() function, we can pick random letters from it.

Example

import string
import random

#specific letters
letters = "TECHGEEKtechgeek"
size = 8
random_string = ""

for i in range(size):
    #pick a random letter
    letter = random.choice(letters)
    
    # add the random letter to random_string
    random_string += letter

print("Your Random String is: ", random_string)

Output

Your Random String is: ehEHCHkE

Generate Random String without Repeating letters

While creating a random string using Python, there is a high chance that the random string may contain repetitive characters. This is because of the random.choice()  function picks random characters from the source string. To pick only unique characters we can use the random.sample() function.

The random.sample(sequence, k) function accepts two arguments sequence and k, and it returns a list of k unique random items or characters from the sequence. In the case of a string, it will return a list of random k numbers of characters from the string.

Example

import string
import random

#specific letters
letters = string.ascii_letters
size = 8

#generate a random unique chracters string
random_string = "".join(random.sample(letters, k=size))

print("Your Random String is: ", random_string)

Output

Your Random String is: fzrDgqOt

How to create a Random Password with letters, special characters, and digits?

Suppose you need to write a script that generates random strong passwords which can include letters, special characters, or digits how would you do that?

For creating such a random password generator in Python, we can use the combination of string.ascii_letters, string.digits, and string.punctuation for the string source and random.choice() function to pick random letters, digits, and special characters.

Example 1: Create a random password in Python

import string
import random

#all characters
characters =  string.ascii_letters + string.digits + string.punctuation

#size of the password
size = 10

#generate a random password using Python
random_password = ""

for i in range(size):
    #pick a random character from characters
    character = random.choice(characters)

    #add the random pick character to the random password
    random_password += character

print("Your Random password is:",random_password)

Output

Your Random password is: kf}3%0YbK5

Example 2: Create a random password of unique characters in Python

There is a chance that the above random password generator example might create a password of all same characters. To create a password with all random unique characters we can use the random.sample() function instead of random.choice().

import string
import random

#all characters
characters = string.ascii_letters + string.digits + string.punctuation

#size of the password
size = 10

#generate a random strong password using python
random_password= "".join(random.sample(characters, k=size))

print("Your Random Unique characters password is: ", random_password)

Output

Your Random Unique characters password is: fSRl$(Es96

Random Passwords with fixed numbers of letters, digits, and symbol

Let say you need to generate a random strong password that must contain at least one uppercase letter, one lowercase letter, one digit, and one special character.

The above two password generator programs may give us strong and unique passwords, but still, there is a chance that they might not include all the characters. It might also be possible they only create a random unique password of all lowercase letters, or digits, or special characters.

If you want to generate a password that must include at least one of all the characters, we have to specify the count for all the characters group, pick the random character from them and add them to create a single strong password.

Example

import string
import random

#function to generate password
def generate_password(upper_count=1, lower_count=1, digits_count=1, special_count=1):
    
    random_upper = "".join(random.sample(string.ascii_lowercase, k=upper_count))
    random_lower = "".join(random.sample(string.ascii_uppercase, k=lower_count))
    random_digits = "".join(random.sample(string.digits, k=digits_count))
    random_special = "".join(random.sample(string.punctuation, k= special_count))

    #add all the random chracters to form a password
    random_password = random_upper+random_lower+random_digits+random_special

    print(f"Your {len(random_password)} characters long Random Password is: ", random_password)

#upper_count >= 26
upper_count = 3 # 3 uppercase characters

#lower_count >=26
lower_count = 5  #5 lowercase characters

#digits_count >=10
digit_count = 4    # 4 digits

#special_count >=32
special_count = 4  #4 special characters  
    
generate_password(upper_count,lower_count, digit_count,special_count)

Output

Your 16 characters long Random Password is: ijsHPZRL4290*$[/

How to generate secure random string tokens in Python?

While dealing with APIs, we are often required to generate random secure tokens for various purposes such as authentication and secure communication gateways.

Python comes with inbuilt secrets modules for such tasks, which can generate cryptographically strong random numbers passwords and security tokens.

Example 1:

Let’s create a 16 bytes hexadecimal random string token using the Python secrets library and token_hex(nbytes) module.

import secrets

print("Your 16 bytes hexadecimal string token is:", secrets.token_hex(16))

Output

Your 16 bytes hexadecimal string token is: a25f48a34a6bf77f5120dfc32d0581b4

Example 2:

To create a URL friendly secure token we can use the secrets’ token_urlsafe(nbytes) method.

import secrets

print("Your 16 bytes url safe string token is:", secrets.token_urlsafe(16)

Output

Your 16 bytes url safe string token is: gX0OllOPGgTSDmYZ7aMwHA

How to generate a secure random UUID in Python?

Most of the high-end applications provide a secure random UUID to every user for unique identification. In the backend database more than integer ID, UUID is used as a primary key.

Python has a standard library UUID, that provides a uuid4() method to generate random UUID’s.

Example

Let’s generate a random UUID using Python

import uuid

print("Your secure UUID is", uuid.uuid4())

Output

Your secure UUID is 695aff53-d77f-4c79-9add-0cade070288f

Conclusion

Generate random strings and numbers often asked during Python interviews. There are many ways to generate a random string in Python, and in this article, we have only discussed the most common and efficient ones. For a more real-world approach, we also discussed how can we generate random and unique passwords, tokens, and UUID using Python and its different libraries.

If we have missed any approach, or you want to share your thoughts and code with us. Please write your’s comments in the comment section.

People are also reading:

Author: Vinay Singh

I am a Full Stack Developer with a Bachelor's Degree in Computer Science, who also loves to write technical articles that can help fellow developers.

Leave a Reply

Your email address will not be published.