using System.Security.Cryptography;
public static void Main()
Console.WriteLine(GeneratePassword(15, 3));
Console.WriteLine(GeneratePassword(15, 3));
Console.WriteLine(GeneratePassword(15, 3));
Console.WriteLine(GeneratePassword(15, 3));
public static string GeneratePassword(int length, int numberOfNonAlphanumericCharacters)
const string allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789";
const string nonAlphanumericChars = "!@#$%^&*()_-+=[{]};:<>|./?";
var randNum = new byte[4];
using (var rng = RandomNumberGenerator.Create())
var randomSeed = BitConverter.ToInt32(randNum, 0);
var random = new Random(randomSeed);
var chars = new char[length];
var allowedCharCount = allowedChars.Length;
var nonAlphanumericCharCount = nonAlphanumericChars.Length;
var numNonAlphanumericCharsAdded = 0;
for (var i = 0; i < length; i++)
if (numNonAlphanumericCharsAdded < numberOfNonAlphanumericCharacters && i < length - 1)
chars[i] = nonAlphanumericChars[random.Next(nonAlphanumericCharCount)];
numNonAlphanumericCharsAdded++;
chars[i] = allowedChars[random.Next(allowedCharCount)];
return new string(chars);