.NET Core  

How To Generate Random Password In C#?

A random password is a combination of characters, numbers, and special characters. We can generate a random password by combining random numbers and random strings.

 Generate A Random Password In C# And .NET Core

The code snippet in this article is an example of how to generate random numbers and random strings and combine them to create a random password using C# and .NET Core.

The Random class constructors have two overloaded forms. It takes either no value, or it takes a seed value.

The Random class has three public methods - Next, NextBytes, and NextDouble. The Next method returns a random number, NextBytes returns an array of bytes filled with random numbers, and NextDouble returns a random number between 0.0 and 1.0.

Generate a random number

The following code in Listing 1 returns a random number.

// Generate a random number  
Random random = new Random();  
// Any random integer   
int num = random.Next();

Listing 1.

Generate a random string

The following code snippet in Listing 2 generates a random string with a given size. The second parameter of the RandomString method is used for setting if the string is a lowercase string.

// Generate a random string with a given size and case.   
// If second parameter is true, the return string is lowercase  
public string RandomString(int size, bool lowerCase)  
{  
    StringBuilder builder = new StringBuilder();  
    Random random = new Random();  
    char ch;  
    for (int i = 0; i < size; i++)  
    {  
        ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));  
        builder.Append(ch);  
    }  
    if (lowerCase)  
        return builder.ToString().ToLower();  
    return builder.ToString();  
}

Listing 2.

Creating a random password

A random password can simply be a combination of a random string and a random number. To make it more complex, you can add special characters and mix them up.

For us, we will combine the two methods - RandomNumber and RandomString.

The following code snippet in Listing 3 generates a password of length 10 with the first four letters lowercase, the next four letters numbers, and the last two letters as uppercase.

// Generate a random password of a given length (optional)  
public string RandomPassword(int size = 0)  
{  
    StringBuilder builder = new StringBuilder();  
    builder.Append(RandomString(4, true));  
    builder.Append(RandomNumber(1000, 9999));  
    builder.Append(RandomString(2, false));  
    return builder.ToString();  
}

Listing 3.

All of the above functionality is listed here in Listing 4. First, create a .NET Core Console app in Visual Studio and use this code.

using System;  
using System.Text;  
  
class RandomNumberSample  
{  
    static void Main(string[] args)  
    {  
        // Generate a random number  
        Random random = new Random();  
        // Any random integer   
        int num = random.Next();  
  
        // A random number below 100  
        int randomLessThan100 = random.Next(100);  
        Console.WriteLine(randomLessThan100);  
  
        // A random number within a range  
        int randomBetween100And500 = random.Next(100, 500);  
        Console.WriteLine(randomBetween100And500);  
  
        // Use other methods   
        RandomNumberGenerator generator = new RandomNumberGenerator();  
        int rand = generator.RandomNumber(5, 100);  
        Console.WriteLine($"Random number between 5 and 100 is {rand}");  
  
        string str = generator.RandomString(10, false);  
        Console.WriteLine($"Random string of 10 chars is {str}");  
  
        string pass = generator.RandomPassword();  
        Console.WriteLine($"Random password {pass}");  
  
        Console.ReadKey();  
    }  
}  
  
public class RandomNumberGenerator  
{  
    // Generate a random number between two numbers    
    public int RandomNumber(int min, int max)  
    {  
        Random random = new Random();  
        return random.Next(min, max);  
    }  
  
// Generate a random string with a given size and case.   
// If second parameter is true, the return string is lowercase  
public string RandomString(int size, bool lowerCase)  
{  
    StringBuilder builder = new StringBuilder();  
    Random random = new Random();  
    char ch;  
    for (int i = 0; i < size; i++)  
    {  
        ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));  
        builder.Append(ch);  
    }  
    if (lowerCase)  
        return builder.ToString().ToLower();  
    return builder.ToString();  
}  
  
    // Generate a random password of a given length (optional)  
    public string RandomPassword(int size = 0)  
    {  
        StringBuilder builder = new StringBuilder();  
        builder.Append(RandomString(4, true));  
        builder.Append(RandomNumber(1000, 9999));  
        builder.Append(RandomString(2, false));  
        return builder.ToString();  
    }  
}  

Listing 4.

The random string and random password look like in Figure 1.

 Generate A Random Password In C# And .NET Core

Figure 1.

Random password with given characters

Now, let’s say you want to create a password that allows some specific characters only. The following code snippet in Listing 5 has a string of valid characters. The code uses this string to pick one character at a time for the password and stops at the given length. The default length of the password is 15.

private static string CreateRandomPassword(int length = 15)  
{  
    // Create a string of characters, numbers, and special characters that are allowed in the password  
    string validChars = "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*?_-";  
    Random random = new Random();  
  
    // Select one random character at a time from the string  
    // and create an array of chars  
    char[] chars = new char[length];  
    for (int i = 0; i < length; i++)  
    {  
        chars[i] = validChars[random.Next(0, validChars.Length)];  
    }  
    return new string(chars);  
}

Listing 5.

Note
You can modify validChars string with the characters you allowed in the password.

Reference
https://madskristensen.net/blog/generate-random-password-in-c/

Listing 6 is the complete program written in .NET Core.

using System;  
  
class Program  
{  
    static void Main(string[] args)  
    {   
        Console.WriteLine(CreateRandomPassword());  
        Console.WriteLine(CreateRandomPassword(10));  
        Console.WriteLine(CreateRandomPassword(30));  
  
        Console.WriteLine(CreateRandomPasswordWithRandomLength());  
  
        Console.ReadKey();  
    }  
  
  
    // Default size of random password is 15  
    private static string CreateRandomPassword(int length = 15)  
    {  
        // Create a string of characters, numbers, special characters that allowed in the password  
        string validChars = "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*?_-";  
        Random random = new Random();  
  
        // Select one random character at a time from the string  
        // and create an array of chars  
        char[] chars = new char[length];  
        for (int i = 0; i < length; i++)  
        {  
            chars[i] = validChars[random.Next(0, validChars.Length)];  
        }  
        return new string(chars);  
    }  
  
    private static string CreateRandomPasswordWithRandomLength()  
    {  
        // Create a string of characters, numbers, special characters that allowed in the password  
        string validChars = "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*?_-";  
        Random random = new Random();  
  
        // Minimum size 8. Max size is number of all allowed chars.  
        int size = random.Next(8, validChars.Length);  
  
        // Select one random character at a time from the string  
        // and create an array of chars  
        char[] chars = new char[size];  
        for (int i = 0; i < size; i++)  
        {  
            chars[i] = validChars[random.Next(0, validChars.Length)];  
        }  
        return new string(chars);  
    }  

Listing 6.

Summary

This article and code sample taught us how to generate random passwords using C# in .NET Core.

Founded in 2003, Mindcracker is the authority in custom software development and innovation. We put best practices into action. We deliver solutions based on consumer and industry analysis.