using System.Collections.Generic;
using System.Security.Cryptography;
private static readonly Random Random = new Random();
public static string GenerateTemporaryPassword(int lowerCount = 10, int upperCount = 2, int numberCount = 2, int symbolCount = 2)
char[] upper = "ABCDEFGHIJKLMNPQRSTUVWXYZ".ToCharArray();
char[] lower = "abcdefghijkmnpqrstuvwxyz".ToCharArray();
char[] number = "123456789".ToCharArray();
char[] symbol = "!#$%^&*_-+=;:<>./?".ToCharArray();
upperCount = Math.Max(upperCount, 1);
lowerCount = Math.Max(lowerCount, 1);
symbolCount = Math.Max(symbolCount, 1);
numberCount = Math.Max(numberCount, 1);
var totalChar = upperCount + lowerCount + numberCount + symbolCount;
lowerCount += 10 - totalChar;
RandomNumberGenerator rngCrypt = RandomNumberGenerator.Create();
byte[] bytes = new byte[totalChar * 8];
rngCrypt.GetBytes(bytes);
var result = new char[totalChar];
for (int i = 0; i < totalChar; i++)
ulong value = BitConverter.ToUInt64(bytes, i * 8);
result[i] = upper[value % (uint)upper.Length];
} else if (numberCount > 0) {
result[i] = number[value % (uint)number.Length];
} else if (symbolCount > 0) {
result[i] = symbol[value % (uint)symbol.Length];
result[i] = lower[value % (uint)lower.Length];
var k = Random.Next(n + 1);
var password = new string(result);
if (password.Length > 128)
return password.Substring(0, 128);
public static void Main()
string password = GenerateTemporaryPassword();
Console.WriteLine(password);